UART
UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)是一种常见的异步串行通信接口,通常简称为串口。它广泛应用于单片机、计算机以及各种通信模块之间,适合短距离、低速率的点对点数据传输。在调试和终端通信中,UART 是最简单直接的选择。它既可以实现全双工,也能配置为半双工,不需要额外的时钟信号来同步,只要通信双方事先约定好一致的波特率即可正常工作。
1. 物理结构
UART 的基本硬件连接非常简洁,通常只需三根线:发送端的 TX 连接到接收端的 RX,再加上公共地线 GND,就能完成数据的双向传输。在 TTL 电平下,逻辑 0 表示为低电平,逻辑 1 表示为高电平。由于是点对点方式,所以电路简单,但通信距离有限,一般在几十厘米到几米范围内较为稳定。
┌─────┐ TX → RX ┌─────┐
│ MCU │ ----------------> │ 模块 │
│ │ <---------------- │ │
└─────┘ RX ← TX └─────┘
GND ———— GND
2. 帧格式
UART 通信以“帧”为单位传输数据。一帧由起始位、数据位、校验位和停止位组成。
空闲线(高电平) ──────┐
↓ 起始位
┌──┬──┬──┬──┬──┬──┬──┬──┬──┐──┐──┐
│St│D0│D1│D2│D3│D4│D5│D6│D7│Pa│Sp│
└──┴──┴──┴──┴──┴──┴──┴──┴──┘──┘──┘
1 数据位(8位) 校验位 停止位
- St:起始位(低电平,1 位)
- D0~D7:数据位,最低位先传输
- Pa:校验位,可选
- Sp:停止位(高电平,1 或 2 位)
3. 原理
UART 的核心原理在于“异步”。与 SPI、I²C 不同,UART 没有时钟线,接收端必须依靠波特率在时间上对信号进行抽样。发送方将数据逐位送出,接收方通过检测起始位获得同步点,然后按预设速率逐位采样,最终重组数据帧。只要通信双方的波特率误差足够小(通常要求小于 ±3%),数据就能被正确接收。这样就避免了额外时钟同步的开销,降低了硬件复杂度。
4. 硬件协议
UART 在物理层的实现不仅有 TTL 电平,还衍生出一系列标准:
- TTL UART:常见于单片机,电平通常为 3.3V 或 5V。
- RS-232:计算机串口常用,逻辑取反,电平范围为 ±3V 到 ±15V,传输距离比 TTL 更远。
- RS-485:采用差分信号,抗干扰强,传输距离可达 1200 米,支持多机总线通信。
- RS-422:与 RS-485 类似,但多用于点对点全双工通信。
5. 参数
UART 的主要参数由波特率、数据位、校验位和停止位组成,不同场景下可灵活组合。
| 参数 | 含义 | 常见取值 |
|---|---|---|
| 波特率 | 每秒传输的比特数,决定通信速率 | 9600、115200 |
| 数据位 | 有效数据长度,一般从 5~9 位 | 8 位最常见 |
| 校验位 | 检错方式,可提高可靠性 | 无、奇校验、偶校验 |
| 停止位 | 帧结束标识,也提供缓冲时间 | 1 位、1.5 位、2 位 |
例如常见的 8N1 表示:8 个数据位(N 表示无校验),1 个停止位。