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

在深入低功耗唤醒设计之前,必须牢固掌握UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)的物理层与数据链路层基础。UART是一种异步、全双工的串行通信协议,通信双方不需要共享时钟信号,而是通过预先约定的波特率与帧格式来同步数据。

2.1 UART协议帧格式

UART数据以“帧”为单位进行传输。一个标准的数据帧由以下部分组成:

  • 起始位(Start Bit):逻辑低电平(0),标志一帧数据的开始。
  • 数据位(Data Bits):5~9位,通常为8位(LSB优先发送)。
  • 校验位(Parity Bit):可选,用于简单的错误检测。
  • 停止位(Stop Bit):逻辑高电平(1),标志一帧数据的结束,长度可为0.5、1、1.5或2位。
关键概念: 空闲状态(Idle Line)是指总线持续为高电平(逻辑1)的状态。当检测到起始位(高→低跳变)时,接收器开始采样数据位。
UART标准帧格式结构图 UART 标准帧格式(8N1 为例) 空闲 高电平 起始 0 D0 LSB D1 D2 D3 D4 D5 D6 D7 MSB 校验 可选 停止 1 时间轴(LSB 优先发送) 说明:8N1 表示 8 位数据位、无校验位、1 位停止位。起始位固定为低电平,停止位固定为高电平。

2.2 波特率(Baud Rate)

波特率定义了每秒传输的符号数(symbols/s)。在UART中,一个符号对应一个比特位,因此波特率等于比特率(bps)。

波特率(bps) 位时间(μs) 典型应用场景
9600 104.17 调试终端、GPS模块、工业传感器
115200 8.68 蓝牙模块、Wi-Fi模组、高速数据采集
921600 1.09 内部芯片间通信、固件升级
低功耗设计提示: 波特率越高,单位时间传输的数据量越大,但接收器的采样时钟频率也越高,动态功耗随之增加。在唤醒设计中,通常使用 9600 或 115200 bps 作为平衡点。

2.3 起始位、停止位与校验位详解

起始位(Start Bit)

起始位是一个位周期的低电平信号。接收器通过检测总线从空闲高电平到低电平的下降沿来同步接收时钟。起始位是帧同步的关键,也是低功耗唤醒检测的物理基础——一个下降沿即可触发MCU从睡眠模式中唤醒。

停止位(Stop Bit)

停止位是一个或多个位周期的高电平信号,用于保证帧间有足够的时间间隔。常见的停止位配置为1位(1 Stop Bit)。如果两帧之间没有停止位间隔,则称为“背靠背”传输,这在DMA批量传输中需要特别注意。

校验位(Parity Bit)

校验位提供简单的错误检测机制,分为奇校验(Odd Parity)和偶校验(Even Parity)。

  • 奇校验: 数据位中“1”的个数 + 校验位 = 奇数。
  • 偶校验: 数据位中“1”的个数 + 校验位 = 偶数。
  • 无校验(None): 不发送校验位,帧长度减少1位。
注意: 在低功耗唤醒场景中,如果使用校验位,接收端必须在唤醒后完成校验计算,这会增加唤醒后的处理延迟。因此,多数唤醒帧设计采用“无校验(8N1)”格式以简化硬件处理。
起始位下降沿检测与唤醒触发 起始位下降沿检测与MCU唤醒触发 空闲(高) 下降沿 起始位(低) 数据位 唤醒中断 说明:MCU在睡眠模式下,UART接收引脚(RX)的下降沿可触发外部中断或唤醒事件,无需等待完整字节接收。

2.4 常见UART帧格式配置

配置名称 数据位 校验位 停止位 帧总长度(位)
8N1 8 无 1 10
8E1 8 偶校验 1 11
8O1 8 奇校验 1 11
7E1 7 偶校验 1 10
9N1 9 无 1 11
唤醒设计要点: 帧总长度直接影响唤醒后接收完整帧所需的时间。例如,在 115200 bps 下,8N1 帧(10位)的传输时间约为 86.8 μs,而 8E1 帧(11位)约为 95.5 μs。对于时间敏感的唤醒协议,应优先选择 8N1 以缩短帧传输时间。

2.5 异步通信的时钟误差容限

UART的异步特性要求通信双方的波特率误差在一定范围内。通常,接收器在每位的中点采样,允许的最大累计误差为 ±1/2 位时间。对于标准UART,推荐波特率误差不超过 ±2%。

// 波特率误差计算示例(以 115200 bps 为例)
// 假设系统时钟为 16 MHz,UART 分频系数为 16
// 实际波特率 = 16,000,000 / (16 * 分频值)
// 若分频值 = 8,实际波特率 = 125,000 bps
// 误差 = (125,000 - 115,200) / 115,200 ≈ 8.5% → 超出容限,通信不可靠
低功耗时钟影响: 在低功耗模式下,MCU常使用内部RC振荡器(如HSI、LSI),其精度通常为 ±1% ~ ±5%。若波特率要求较高(如 921600 bps),必须使用外部晶振或PLL锁相环以保证时钟精度,否则会导致帧同步失败。
波特率误差与采样点示意图 波特率误差与中点采样 理想位时间 实际位时间(偏快) 理想采样点 实际采样点 误差偏移 说明:当接收端波特率偏快时,采样点逐渐偏离位中心,累计误差超过半位时间将导致采样错误。

2.6 本章小结

  • UART帧由起始位(低电平)、数据位(LSB优先)、可选校验位和停止位(高电平)组成。
  • 波特率决定位时间,常用 9600/115200 bps,误差需控制在 ±2% 以内。
  • 起始位的下降沿是低功耗唤醒的物理触发信号,无需等待完整帧。
  • 8N1 格式(10位帧长)是唤醒设计中的首选配置,兼顾传输效率与硬件简化。
  • 低功耗模式下需关注时钟源精度,避免因RC振荡器漂移导致波特率失配。