[应用相关] 普通io口模拟串口通信

[复制链接]
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 模拟串口还是有优势:硬件成本低,灵活适配非标准协议,适合资源紧张场景。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
快速回复 在线客服 返回列表 返回顶部