对于两个不共地的单片机普通IO口之间的电平传输,可以使用以下几种实现方式:

  1. 串口通信:使用串口通信进行数据传输,需要将两个单片机的串口引脚连接在一起,并保证串口通信的波特率、数据位、校验位等参数一致。代码示例:

    // 发送方代码
    void send_data(char data) {
    // 等待串口发送完毕
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
    // 发送数据
    USART_SendData(USART1, data);
    }

    // 接收方代码
    char receive_data() {
    // 等待串口接收完毕
    while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
    // 读取数据
    return USART_ReceiveData(USART2);
    }

  2. SPI通信:使用SPI通信进行数据传输,需要将两个单片机的SPI引脚连接在一起,并设置SPI通信的时钟极性、相位等参数一致。代码示例:

    // 发送方代码
    void send_data(char data) {
    // 等待SPI发送完毕
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
    // 发送数据
    SPI_I2S_SendData(SPI1, data);
    // 等待SPI接收完毕
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
    // 读取接收到的数据
    SPI_I2S_ReceiveData(SPI1);
    }

    // 接收方代码
    char receive_data() {
    // 等待SPI接收完毕
    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
    // 读取接收到的数据
    char data = SPI_I2S_ReceiveData(SPI2);
    // 等待SPI发送完毕
    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
    // 发送数据
    SPI_I2S_SendData(SPI2, data);
    return data;
    }

  3. I2C通信:使用I2C通信进行数据传输,需要将两个单片机的I2C引脚连接在一起,并设置I2C通信的地址、速率等参数一致。代码示例:

    // 发送方代码
    void send_data(char data) {
    // 等待I2C发送完毕
    while (I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE) == RESET);
    // 发送数据
    I2C_SendData(I2C1, data);
    // 等待I2C接收完毕
    while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) == SET);
    }

    // 接收方代码
    char receive_data() {
    // 等待I2C接收完毕
    while (I2C_GetFlagStatus(I2C2, I2C_FLAG_RXNE) == RESET);
    // 读取接收到的数据
    char data = I2C_ReceiveData(I2C2);
    // 等待I2C发送完毕
    while (I2C_GetFlagStatus(I2C2, I2C_FLAG_TXE) == RESET);
    // 发送数据
    I2C_SendData(I2C2, data);
    return data;
    }

总之,选择哪种传输方式取决于具体的应用场景和硬件条件,需要根据需求做出选择。