2、UART基础原理:串口通信的电气特性、波特率、数据帧格式
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是嵌入式系统中最基础、最常用的串行通信接口之一。无论是调试单片机程序、与GPS模块交互、连接蓝牙模组,还是与PC上位机进行数据联调,UART都扮演着不可替代的角色。理解UART的电气特性、波特率配置以及数据帧格式,是进行串口协议封包与上位机联调的前提。本章将从物理层到数据链路层,系统拆解UART通信的核心机制,为后续的协议设计与实战联调打下坚实基础。
上图展示了UART通信的完整链路:发送端MCU通过TX引脚将数据逐位发送至接收端的RX引脚,同时双方必须共地以保证电平参考一致。数据帧由起始位、数据位、可选校验位和停止位组成,空闲时总线保持高电平。下面我们将从电气特性、波特率、数据帧格式三个维度深入展开。
2.1 串口通信的电气特性
UART的电气特性决定了信号在物理介质上的表示方式,是硬件设计和排障的基础。不同电平标准直接影响通信距离、抗干扰能力和接口电路设计。
核心原理:TTL与RS-232电平标准
在嵌入式系统中,最常见的两种电平标准是TTL电平和RS-232电平。TTL电平以0V表示逻辑0(低电平),以3.3V或5V表示逻辑1(高电平),适用于板级短距离通信(通常小于1米)。RS-232电平则采用负逻辑:+3V至+15V表示逻辑0,-3V至-15V表示逻辑1,信号摆幅更大,抗干扰能力更强,传输距离可达15米以上,常用于PC串口与外部设备的连接。
| 特性 | TTL电平 | RS-232电平 |
|---|---|---|
| 逻辑1电平 | 3.3V / 5V | -3V ~ -15V |
| 逻辑0电平 | 0V | +3V ~ +15V |
| 传输距离 | < 1米 | 15米左右 |
| 典型应用 | MCU间通信、板级调试 | PC串口、工业设备 |
| 接口电平转换 | 无需转换 | 需MAX3232等芯片转换 |
在实际联调中,若MCU的UART引脚直接连接PC的DB9串口,必须经过电平转换芯片(如MAX3232),否则会烧毁MCU引脚。同时,需要注意共地问题:两个通信设备必须共享同一个参考地,否则电平判断会出错。
2.2 波特率:通信速率的基石
波特率(Baud Rate)定义每秒传输的码元(符号)数量,单位是bps(bits per second)。在UART中,每个码元携带1比特信息,因此波特率等于比特率。波特率决定了每一位数据的传输时间宽度:T_bit = 1 / Baud。
判断方法:波特率匹配与误差容忍
通信双方必须配置相同的波特率,否则接收端采样点会逐渐偏移,导致数据错位。常见的波特率有9600、19200、38400、115200等。实际系统中,晶振误差和分频器精度会导致实际波特率与理论值存在偏差。UART接收端通常在每位数据的中间点采样,只要误差不超过±5%(对于8-N-1格式),通信仍可正常进行。
// 波特率计算示例(STM32 HAL库)
// 假设系统时钟 72MHz,目标波特率 115200
// BRR = fck / (16 * Baud) = 72000000 / (16 * 115200) = 39.06
// 取整为 39,实际波特率 = 72000000 / (16 * 39) = 115384.6
// 误差 = (115384.6 - 115200) / 115200 = 0.16% < 2%,可正常通信
2.3 数据帧格式:起始位、数据位、校验位、停止位
UART是异步通信协议,没有独立的时钟线,因此必须通过帧格式来同步收发双方。一个完整的数据帧由起始位、数据位、校验位(可选)和停止位组成。
核心原理:帧结构详解
- 起始位: 空闲时总线为高电平,发送端拉低电平1个位时间,表示数据开始。接收端检测到下降沿后开始采样。
- 数据位: 通常为5~8位,从最低有效位(LSB)开始传输。常见配置为8位数据。
- 校验位: 可选,用于简单的错误检测。偶校验(Even)保证数据位+校验位中1的个数为偶数;奇校验(Odd)保证1的个数为奇数。
- 停止位: 数据结束后,发送端拉高电平1位、1.5位或2位时间,表示帧结束。停止位为接收端提供重新同步的时间。
| 配置名称 | 数据位 | 校验位 | 停止位 | 典型应用 |
|---|---|---|---|---|
| 8-N-1 | 8 | 无 | 1 | 最常用,调试首选 |
| 8-E-1 | 8 | 偶校验 | 1 | Modbus RTU |
| 8-O-1 | 8 | 奇校验 | 1 | 部分工业协议 |
| 7-E-1 | 7 | 偶校验 | 1 | 早期ASCII通信 |
在协议封包时,帧格式的选择直接影响有效载荷率。例如,8-N-1格式下,每传输10位(1起始+8数据+1停止)只有8位有效数据,有效载荷率为80%。若使用8-E-1,则每11位中只有8位有效,载荷率降至72.7%。
2.4 常见误区与总结复盘
在UART基础应用中,工程师常犯以下错误,需要特别注意:
- TX/RX交叉连接错误: 发送端的TX必须连接接收端的RX,反之亦然。很多初学者将TX-TX直连,导致通信失败。
- 忽略共地: 两个设备必须共地,否则电平参考点不同,信号无法正确解析。
- 波特率误差累积: 当使用非标准晶振(如11.0592MHz)时,某些波特率无法精确分频,误差可能超过5%。此时应选择误差更小的波特率或使用外部高精度晶振。
- 校验位配置不一致: 收发双方的校验位设置必须完全一致,否则数据帧解析会错位。
- 停止位过短: 在高速通信(如1Mbps以上)时,1位停止位可能不足以让接收端完成帧同步,建议使用2位停止位。
总结而言,UART通信的可靠性建立在正确的电气连接、匹配的波特率和一致的帧格式之上。在实际联调中,建议先用逻辑分析仪或示波器观察波形,确认起始位、数据位和停止位的时序关系,再排查协议层问题。掌握这些基础原理,后续的协议封包和上位机联调才能事半功倍。