发新帖我要提问
12
返回列表
打印
[应用相关]

普通io口模拟串口通信

[复制链接]
楼主: Zhiniaocun
手机看帖
扫描二维码
随时随地手机跟帖
21
wangdezhi| | 2025-6-19 22:15 | 只看该作者 回帖奖励 |倒序浏览
延时的精度至关重要,通常会使用STM32的定时器(如TIM)来实现精确的微秒级延时。

使用特权

评论回复
22
biechedan| | 2025-6-19 22:46 | 只看该作者
波特率过低 时,定时器溢出值过大可能导致精度下降

使用特权

评论回复
23
belindagraham| | 2025-6-20 09:24 | 只看该作者
软件UART的核心在于精确控制IO口的电平变化,以符合串口通信的时序要求。

使用特权

评论回复
24
jimmhu| | 2025-6-20 10:05 | 只看该作者
在电源引脚附近放置去耦电容,以减少电源噪声。

使用特权

评论回复
25
1988020566| | 2025-6-20 13:01 | 只看该作者
优化采样点选择,避免噪声干扰。              

使用特权

评论回复
26
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);
}

使用特权

评论回复
27
plsbackup| | 2025-6-20 14:13 | 只看该作者
模拟串口的本质是通过 ​​定时器中断​​ 精确控制TX的位输出时序,并在RX端检测边沿以采样数据位。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则