精通 UART:通用异步收发器详解
UART(通用异步收发器)仍是点对点通信最广泛采用的硬件协议。本指南将带您配置 UART、理解其包格式、实现产品开发中必不可少的安全帧协议。
正确配置时,UART 仅需两根线即可支持多种串行数据流。这种最小布线降低成本和复杂度,使 UART 成为嵌入式系统、微控制器和 PC 的理想选择。
我们将涵盖 UART 基础——包传输、标准帧格式、增加安全性和合规价值的自定义帧。文章还提供解读数据手册和配置 UART 外设的实用步骤。
读完后,您将牢固掌握 UART 标准及如何利用它们增强新产品能力。
“沟通中最大的问题是自以为已经发生了沟通。”
——George Bernard Shaw
通信协议构建设备间交互结构。它们定义通用语言确保数据可靠交换。在嵌入式世界,UART 是设备间硬件通信的事实标准。
与总线协议不同,UART 仅需发送 (Tx) 和接收 (Rx) 两线,简化板级设计并降低功耗。
尽管广受欢迎,许多实现忽视恰当帧设计,可能损害性能和安全。定义良好的帧协议是无差错、受保护数据交换的关键。
异步串行通信意味着无共享时钟线;发送端和接收端依靠匹配波特率保持同步。
接口

图 1. 两个 UART 直接通信。
每个 UART 暴露两个专用引脚:
- 发送器 (Tx)
- 接收器 (Rx)

图 2. UART 与数据总线接口。
此布局下,发送 UART 将总线并行数据转为 Tx 线串行比特流。接收 UART 采样此流,重组比特为并行数据送本地总线。
双方必须在相同波特率运行——比特/秒速率。不匹配导致帧错误;典型 UART 容忍 10% 波特率偏差。
表 1 总结 UART 关键属性。
表 1. UART 概要
| 线数 | 2 |
|---|---|
| 支持波特率 | 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000, 1500000 |
| 传输方式 | 异步 |
| 最大主设备 | 1 |
| 最大从设备 | 1 |
因 UART 为异步,发送端基于自有时钟驱动比特流,接收端用内部时钟采样输入比特。起始位、数据帧、可选奇偶校验、停止位共同定义包。
数据传输
每个 UART 包含:
- 起始位:高到低跳变,标志帧开始。
- 数据帧:5–8 位载荷,LSB 先行。若用校验位,帧可为 9 位。
- 校验位(可选):奇/偶校验,检测单比特错误。
- 停止位:1–2 个高电平位,标志帧结束。

图 3. UART 包结构。

图 4. 起始位示意。

图 5. 数据帧示例。

图 6. 校验位用法。

图 7. 停止位示意。
传输流程
1. 并行输入:发送端从总线接收并行数据。

图 8. 数据总线馈送发送端。
2. 帧组装:发送端添加起始位、校验位、停止位,形成完整包。

图 9. 发送端 UART 包。
3. 串行传输:包按配置波特率逐位发送。

图 10. 连续 UART 传输。
4. 接收:接收端丢弃帧位,重构原始数据。

图 11. 接收端包。
5. 并行输出:接收端将串行数据转回并行并转发本地总线。

图 12. 数据流向接收总线。
自定义帧协议
标准 UART 帧虽满足许多用例,但增加自定义帧层可增强安全性、确保仅预期设备通信。
通过嵌入唯一帧头、帧尾和 CRC,每个设备可验证包源自可信源头。这在安全关键或安保环境尤为宝贵。
图 13 展示典型自定义帧:

图 13. 示例 UART 帧协议。
帧通常包含:
- 帧头 1 (0xAB) 和 帧头 2 (0xCD) — 唯一标识符。
- 命令 (CMD) — 指定动作。
- 数据长度 (DL) — 载荷字节数。
- 载荷 (Data n) — 实际数据。
- 帧尾 1 (0xE1) 和 帧尾 2 (0xE2) — 结束标记。
- CRC — 双端计算的错误校验值。
双方必须使用相同帧规则;否则包会被拒绝。
UART 配置步骤
1. 阅读数据手册 理解 UART 接口和引脚分配。

图 14. 微控制器数据手册摘录。
2. 检查内存映射 获取 UART 寄存器和地址。

图 15. 微控制器内存映射。
3. 定义 UART 端口参数——数据位、校验、停止位、工作模式。示例描述:
• 5–8 数据位
• 1、1.5 或 2 停止位
• 无、奇或偶校验
• 全双工、DMA 使能、异步传输
4. 计算波特率 使用外设时钟 (PCLK) 和 MCU 的过采样与分频寄存器。通用公式:
波特率 = PCLK / ((M + N/2048) × 2OSR + 2 × DIV)
其中:
OSR — 过采样率 (0–3)
DIV — 波特率分频 (1–65535)
M — 分数分频 MSB (1–3)
N — 分数分频 LSB (0–2047)
下表举例 26 MHz 和 16 MHz PCLK 下的波特率设置。
表 2. 基于 26 MHz PCLK 的波特率示例
| 波特率 | OSR | DIV | DIVM | DIVN |
|---|---|---|---|---|
| 9600 | 3 | 24 | 3 | 1078 |
| 115200 | 3 | 4 | 1 | 1563 |
表 3. 基于 16 MHz PCLK 的波特率示例
| 波特率 | OSR | DIV | DIVM | DIVN |
|---|---|---|---|---|
| 9600 | 3 | 17 | 3 | 1078 |
| 115200 | 3 | 2 | 2 | 348 |
5. 按数据手册配置 UART 寄存器。关键寄存器包括:
表 4. UART 寄存器说明
| 名称 | 描述 |
|---|---|
| UART_DIV | 波特率分频 |
| UART_FIBR | 分数波特率控制 |
| UART_LCR2 | 线控制寄存器 (OSR、停止位、校验) |
寄存器编程完成后,UART 即可可靠收发数据。
UART 为何重要
理解 UART 对设计稳健、低成本、高吞吐串行链路的工程师至关重要。掌握帧协议、波特率计算、寄存器配置确保数据完整性与系统可靠性。
常见用例
- 调试 — 固件开发时记录日志。
- 制造 — 实时诊断与追踪日志。
- 空中升级 — 向嵌入式设备交付固件变更。
- 验证 — 出厂前验证设备功能。
参考文献
“Basics of UART Communication.” Electronics Hub, July 2017.
Campbell, Scott. “Basics of UART Communication.” Circuit Basics. Keim, Robert.
“Back to Basics: The Universal Asynchronous Receiver/Transmitter.” All About Circuits, December 2016.
“What Is UART Protocol? UART Communication Explained.” Arrow.
嵌入式