2. 串口基础回顾:UART协议帧格式、波特率、起始位/数据位/停止位/校验位详解

在深入低功耗设计之前,必须彻底理解UART(通用异步收发传输器)的物理层协议。UART是一种异步串行通信协议,这意味着它不需要单独的时钟线来同步发送方和接收方,而是通过预定义的波特率和帧格式来确保数据正确传输。

2.1 UART协议帧格式

一个标准的UART数据帧由以下部分组成:

  • 空闲位(Idle):当总线没有数据传输时,TX线保持高电平(逻辑1)。
  • 起始位(Start Bit):发送方将TX线从高电平拉低(逻辑0),通知接收方“准备接收数据”。
  • 数据位(Data Bits):紧随起始位之后,通常为5~9位,最常见的是8位(LSB优先发送)。
  • 校验位(Parity Bit):可选,用于简单的错误检测(奇校验或偶校验)。
  • 停止位(Stop Bit):将TX线拉回高电平(逻辑1),表示帧结束。长度通常为1、1.5或2位。
关键概念:UART的“异步”特性意味着接收方必须依靠起始位的下降沿来重新同步其内部时钟。如果波特率误差超过±2%,数据采样将出现位偏移,导致通信失败。
UART 标准帧结构(8N1格式) 空闲 (高电平) 起始 (低电平) D0 D1 D2 D3 D4 D5 D6 D7 停止 (高电平) 时间轴 → 1位时间

2.2 波特率详解

波特率(Baud Rate)定义了每秒传输的符号数。在UART中,一个符号通常对应一个比特,因此波特率等于比特率(bps)。

波特率 (bps) 位时间 (μs) 传输1字节耗时 (8N1) 典型应用场景
9600 104.17 ≈1.04 ms 调试终端、GPS模块
115200 8.68 ≈86.8 μs 蓝牙模块、传感器数据流
921600 1.09 ≈10.9 μs 高速数据采集、固件升级
3000000 0.33 ≈3.3 μs 内部芯片间通信(短距离)
低功耗设计要点:波特率越高,单位时间传输的数据量越大,MCU可以更快地进入休眠状态。但高波特率对时钟精度要求更高,且信号在长距离传输时更容易衰减。在电池供电系统中,建议在满足通信距离的前提下,优先选择115200或更高的波特率。

2.3 起始位与停止位

起始位和停止位是UART帧的“帧同步”机制:

  • 起始位(Start Bit):固定为逻辑0(低电平)。接收方通过检测到下降沿(从空闲高电平跳变到低电平)来启动内部采样时钟。
  • 停止位(Stop Bit):固定为逻辑1(高电平)。接收方在停止位结束时,必须检测到高电平,否则将产生帧错误(Framing Error)。

停止位的长度可以配置为1、1.5或2位。在低功耗设计中,使用1位停止位可以最小化帧开销,提高有效数据吞吐量。

2.4 数据位与字节序

数据位通常配置为8位(1字节),但也可以配置为5、6、7或9位。UART协议规定LSB(最低有效位)优先发送。例如,发送字节 0x53(二进制 0101 0011)时,实际发送顺序为:

起始位 → 1 → 1 → 0 → 0 → 1 → 0 → 1 → 0 → 停止位
         (D0) (D1) (D2) (D3) (D4) (D5) (D6) (D7)
常见陷阱:许多初学者误以为UART发送的是MSB优先。如果使用逻辑分析仪抓取波形,请务必确认LSB优先的规则,否则会得到反向的字节值。

2.5 校验位:奇校验与偶校验

校验位提供简单的错误检测能力。发送方根据数据位中“1”的个数,自动计算并插入校验位:

校验类型 规则 示例(数据位 0x53 = 0101 0011,含4个1)
无校验 (N) 不发送校验位 帧长度 = 1 + 8 + 1 = 10位
奇校验 (O) 使总“1”个数为奇数 数据位有4个1(偶数),校验位=1,总1个数=5(奇数)
偶校验 (E) 使总“1”个数为偶数 数据位有4个1(偶数),校验位=0,总1个数=4(偶数)
标记校验 (M) 校验位固定为1 较少使用,不提供错误检测
空格校验 (S) 校验位固定为0 较少使用,不提供错误检测
低功耗建议:在噪声环境较好的板级通信中,建议关闭校验位(8N1格式),以减少每帧的传输时间,从而让MCU更早进入休眠。如果通信环境存在干扰,使用偶校验可以在不显著增加功耗的前提下提供基本的错误检测。

2.6 常见UART配置速查表

以下是最常用的UART帧格式配置及其应用场景:

配置名称 数据位 校验位 停止位 帧长度 典型应用
8N1 8 无 1 10位 最通用,低功耗首选
8E1 8 偶校验 1 11位 工业总线、Modbus RTU
8O1 8 奇校验 1 11位 某些旧式设备兼容
7E1 7 偶校验 1 10位 ASCII文本传输(0-127)
9N1 9 无 1 11位 多机通信地址位标记
不同帧格式对比:8N1 vs 8E1 8N1 (10位): S D0 D1 D2 D3 D4 D5 D6 D7 P St 8E1 (11位): S D0 D1 D2 D3 D4 D5 D6 D7 P St 8N1:无校验位,帧长10位 有效数据占比 = 8/10 = 80% 8E1:含偶校验位,帧长11位 有效数据占比 = 8/11 ≈ 72.7%

2.7 硬件流控:RTS/CTS

除了基本的帧格式,UART还支持硬件流控(RTS/CTS)来防止数据溢出:

  • RTS(请求发送):接收方拉低RTS信号,表示“可以发送数据”。
  • CTS(清除发送):发送方检测CTS信号,如果为低电平则允许发送,否则暂停发送。
低功耗设计关联:在DMA+空闲中断的协同策略中,硬件流控可以防止接收缓冲区溢出,避免因数据丢失而触发额外的重传和唤醒。建议在高速通信(≥921600 bps)时启用RTS/CTS流控。

2.8 本章小结