1. 串行通信:从比特流到协议栈
第一次调试串口通信的场景我还记忆犹新——盯着示波器上跳动的波形,却分不清哪个是数据位哪个是起始位。串行通信就像两个人在用摩尔斯电码对话,数据通过单根导线像糖葫芦一样串行传输。这种"一个接一个"的传输方式,与并行通信的"八车道高速公路"形成鲜明对比。实际项目中,我更喜欢用串行通信,不仅因为节省硬件资源,更因为抗干扰能力强。记得用STM32做智能家居网关时,仅用TX/RX两根线就实现了与多个传感器的稳定通信。
异步串行通信最有趣的特点是"无时钟同步"。就像两个人约好每分钟说一句话,但不用对表。通信双方靠起始位突然"拍肩膀"唤醒对方,然后按照约定好的语速(波特率)交流。这里有个容易踩的坑:波特率误差不能超过2.5%。有次我用11.0592MHz晶振给51单片机配9600波特率很稳,换成12MHz晶振就出现乱码,这就是时钟误差超过容忍范围的典型症状。
2. UART:硬件工程师的瑞士军刀
2.1 解剖UART的内部结构
拆开任一款带串口的单片机,都能找到UART这个"勤劳的邮差"。它主要由三大模块组成:波特率发生器就像节拍器,控制着通信节奏;发送移位寄存器把并行数据变成串行比特流,像工厂的流水线;接收移位寄存器则相反,把收到的串行数据重新组装。我在调试CH340串口芯片时,曾用逻辑分析仪捕捉到完整的发送过程:先拉低起始位,接着8位数据像小火车一样依次发出,最后停止位高电平收尾。
2.2 实战中的UART配置
配置STM32的UART时,这几个参数最关键:
- 数据位长度:常见8位,但有些老设备用7位
- 停止位:1位足够,但工业设备常用2位抗干扰
- 校验位:偶校验能发现单bit错误 最容易被忽视的是FIFO设置。有次做GPS数据解析,因为没开接收FIFO,导致115200波特率下频繁丢数据。后来发现FIFO就像快递柜,能在CPU来不及处理时暂存数据。
3. TTL电平:数字世界的摩斯密码
3.1 电压背后的逻辑
TTL电平最迷人的地方在于用电压讲故事:0.8V以下是"否",2V以上



被折叠的 条评论
为什么被折叠?



