wangdezhi 发表于 2025-6-19 22:15

延时的精度至关重要,通常会使用STM32的定时器(如TIM)来实现精确的微秒级延时。

biechedan 发表于 2025-6-19 22:46

波特率过低 时,定时器溢出值过大可能导致精度下降

belindagraham 发表于 2025-6-20 09:24

软件UART的核心在于精确控制IO口的电平变化,以符合串口通信的时序要求。

jimmhu 发表于 2025-6-20 10:05

在电源引脚附近放置去耦电容,以减少电源噪声。

1988020566 发表于 2025-6-20 13:01

优化采样点选择,避免噪声干扰。            

qiufengsd 发表于 2025-6-20 13:48

void SoftUART_SendByte(uint8_t data) {
    // 发送起始位(低电平)
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
    Delay_us(104); // 9600波特率下1位时间约104μs
   
    // 发送8位数据(LSB优先)
    for (int i = 0; i < 8; i++) {
      if (data & 0x01) {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
      } else {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
      }
      data >>= 1;
      Delay_us(104);
    }
   
    // 发送停止位(高电平)
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
    Delay_us(104);
}

plsbackup 发表于 2025-6-20 14:13

模拟串口的本质是通过 ​​定时器中断​​ 精确控制TX的位输出时序,并在RX端检测边沿以采样数据位。

小岛西岸来信 发表于 2025-7-4 18:46

普通 IO 模拟串口还是有优势:硬件成本低,灵活适配非标准协议,适合资源紧张场景。
页: 1 [2]
查看完整版本: 普通io口模拟串口通信