1. 串行通信基础概念解析
在嵌入式系统和单片机开发中,串行通信是最基础也最重要的外设接口之一。作为从业十余年的嵌入式工程师,我经常遇到新手对UART和USART概念混淆不清的情况。今天我就从最底层的硬件原理出发,结合STM32实际开发经验,为大家彻底讲透串行通信的方方面面。
1.1 串行与并行通信的本质区别
1.1.1 并行通信的硬件实现
并行通信采用多根数据线同时传输数据位,其物理层特性决定了它的优势与局限。以一个典型的8位并行接口为例:
- 数据线:D0-D7共8根
- 控制线:至少需要读写控制线(如WR和RD)
- 地线:GND必须独立布线
实际电路连接时,发送端和接收端的对应数据线必须严格一一对应。我曾在一个工业控制项目中,因为D3和D4线序接反,导致数据传输完全错误,排查了整整两天才发现这个低级错误。
经验提示:并行布线时建议使用彩虹排线(颜色顺序固定),并在PCB上明确标注线序。
1.1.2 串行通信的拓扑结构
相比之下,串行通信只需要三根基础线:
- TX(发送)
- RX(接收)
- GND(地)
在RS-232标准中,还定义了RTS/CTS等硬件流控信号线,但在大多数嵌入式应用中,三线制足以满足需求。这种简化的物理连接带来了三大优势:
- 布线成本降低80%以上
- 传输距离大幅提升(RS-232最远可达15米)
- 抗干扰能力显著增强
1.2 同步与异步的时钟机制
1.2.1 同步通信的时钟恢复
同步通信依赖专用的时钟线(如SPI的SCK、I2C的SCL),其核心挑战在于时钟信号的完整性保持。在高速传输时(>1MHz),需要考虑:
- 时钟抖动(Jitter)必须小于位周期的10%
- 信号上升/下降时间要匹配传输速率
- 线长差异会导致时钟偏移(Skew)
我在设计一个SPI Flash存储系统时,当时钟频率达到10MHz时,发现数据采样不稳定。最终通过缩短走线长度(<5cm)并添加终端电阻解决了问题。
1.2.2 异步通信的波特率校准
异步通信没有专用时钟线,完全依赖双方预设的波特率。常见的波特率误差来源包括:
- 晶振精度不足(普通晶振±50ppm)
- 时钟分频计算错误
- 软件延时不精确
下表展示了不同波特率下的允
