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)在后。
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 停止位)是否匹配。
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% 以内。
- 理解帧格式和时序是后续实现硬件流控和软件超时重传的基础。