1. UART 基础概念

1.1 什么是 UART

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种广泛使用的串行通信协议,负责在设备之间以全双工、异步方式传输数据。它不需要时钟信号线,仅通过两根数据线(TX 和 RX)即可完成双向通信,是嵌入式系统中最基础、最通用的调试与数据交换接口之一。

核心要点:UART 不是一种总线协议(如 I²C、SPI),而是一种物理层+数据链路层的通信机制。它定义了数据如何以比特流形式在单根线上逐位传输,以及如何通过起始位、停止位和校验位来保证帧的完整性。

1.2 历史背景

年代 里程碑 说明
1960s 早期电传打字机接口 使用电流环和串行比特流传输字符,奠定了异步串行通信的雏形
1969 RS-232 标准发布 EIA 定义了电压电平、引脚定义和连接器规范,UART 硬件开始标准化
1980s PC 集成 UART 芯片 8250/16450/16550 系列 UART 成为 IBM PC 标准组件,支持 FIFO 缓冲
1990s–至今 MCU 内置 UART 外设 几乎所有微控制器(STM32、AVR、ESP32 等)都集成 UART 模块,成为调试和通信标配
为什么 UART 至今仍被广泛使用? 因为它只需要两根线、无需时钟同步、硬件实现简单、驱动开发门槛低,且几乎所有 MCU 和 SoC 都原生支持。在调试场景中,UART 是“最后一道防线”——即使系统崩溃,只要晶振和引脚正常,仍然可以输出调试信息。

1.3 全双工异步串行通信原理

UART 通信的核心特征可以用三个关键词概括:

  • 全双工(Full-Duplex):发送和接收可以同时进行,互不干扰。TX 引脚只负责发送,RX 引脚只负责接收,两条独立的数据路径并行工作。
  • 异步(Asynchronous):通信双方不需要共享时钟信号。接收端通过检测起始位的跳变沿来同步本地采样时钟,从而在正确的时刻读取数据位。
  • 串行(Serial):数据以比特为单位,在单根线上按时间顺序逐位传输,低位(LSB)在前,高位(MSB)在后。
全双工异步串行通信原理图 全双工异步串行通信原理 设备 A (MCU / PC) 设备 B (传感器 / 模块) TX → RX RX ← TX 本地时钟(无共享时钟) 本地时钟(无共享时钟) 两条独立数据线,同时双向传输,无需时钟线

1.4 数据帧格式

UART 的数据以帧(Frame)为单位传输。一帧包含以下固定字段,按时间顺序排列:

字段 位数 电平状态 功能描述
起始位 1 bit 高 → 低跳变 标志数据帧开始,接收端检测到下降沿后启动采样定时器
数据位 5–9 bits(常用 8 bits) LSB 先发,MSB 后发 实际传输的有效数据,通常为一个字节(8 bits)
校验位 0–1 bit(可选) 奇校验 / 偶校验 / 固定 用于检测传输错误,奇校验使 1 的个数为奇数,偶校验使 1 的个数为偶数
停止位 1–2 bits(常用 1 bit) 高电平 标志数据帧结束,给接收端处理时间,同时为下一帧起始位准备下降沿
常见配置陷阱:发送端和接收端的帧格式必须完全一致(数据位长度、校验模式、停止位数量),否则接收端会解析出乱码或触发帧错误(Frame Error)。调试驱动时,第一件事就是确认双方的“8N1”(8 数据位、无校验、1 停止位)是否匹配。
UART 数据帧格式时序图 UART 数据帧格式(8N1 示例) 空闲 (高电平) 起始 1 bit D0 D1 D2 D3 D4 D5 D6 D7 8 位数据位(LSB 先发) 无 校验 停止 1 bit 空闲 1 帧 = 10 bits(8N1 配置)

1.5 波特率与位时序

波特率(Baud Rate) 表示每秒传输的符号数。在 UART 中,一个符号即一个比特,因此波特率等于比特率。常见标准波特率包括:

  • 9600 bps:经典低速调试速率,兼容性最好
  • 115200 bps:嵌入式调试最常用速率,平衡速度与稳定性
  • 921600 bps:高速传输,适合大数据量日志输出

波特率决定了每一位的持续时间:位时间 (s) = 1 / 波特率。例如 115200 bps 时,每位持续约 8.68 µs。接收端在检测到起始位下降沿后,会在每位的中点附近采样,以避开信号跳变的不稳定区域。

驱动开发关键点:波特率误差必须控制在 ±2% 以内,否则累积的位偏移会导致采样点偏离数据位中心,最终出现帧错误或乱码。MCU 的 UART 外设通常通过时钟分频生成波特率,配置时需检查分频误差是否在允许范围内。

1.6 常见 UART 信号引脚

引脚名称 方向 功能
TXD 输出 发送数据线,输出串行比特流
RXD 输入 接收数据线,输入串行比特流
RTS 输出 请求发送(硬件流控),通知对方可以发送数据
CTS 输入 清除发送(硬件流控),对方允许本端发送数据
GND — 信号地,为通信双方提供参考电平
调试小技巧:在驱动开发初期,只连接 TXD、RXD 和 GND 三根线即可完成基本通信。RTS/CTS 硬件流控可以后续再启用,避免一开始就引入复杂的握手逻辑。

1.7 本章小结

  • UART 是一种全双工异步串行通信协议,仅需 TX、RX、GND 三线即可工作。
  • 数据帧由起始位、数据位、可选校验位、停止位组成,收发双方必须配置一致。
  • 波特率决定传输速度,误差需控制在 ±2% 以内。
  • 理解帧格式和时序是后续实现硬件流控和软件超时重传的基础。