1. UART 基础概念
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是 MCU 驱动开发中最基础、最常用的串行通信接口。理解 UART 的底层原理,是编写稳定、高效中断服务函数的前提。
1.1 UART 通信原理
UART 采用异步串行通信方式,通信双方不需要共享时钟信号,而是通过约定相同的波特率与数据帧格式来同步数据收发。其核心结构包含发送器(TX)、接收器(RX)和波特率发生器三部分。
关键特征:全双工通信(TX/RX 独立线路)、异步无时钟线、点对点连接。
1.2 异步串行通信与波特率
异步串行通信意味着数据以比特(bit)为单位,在单根数据线上逐位传输,且收发双方没有共享时钟。为了正确采样每一位,双方必须使用相同的波特率(Baud Rate)。
| 参数 | 说明 | 常见值 |
|---|---|---|
| 波特率 | 每秒传输的符号数(bit/s) | 9600、19200、115200 |
| 位时间 | 传输 1 位所需时间 = 1 / 波特率 | 115200 → 约 8.68 μs |
| 误差容限 | 收发双方波特率允许的最大偏差 | 通常 < ±2% |
开发避坑:波特率不匹配是 UART 通信失败的首要原因。MCU 主频、分频系数、时钟源误差都会导致实际波特率偏离设定值。务必使用示波器或逻辑分析仪实测位时间。
1.3 数据帧格式
UART 数据帧是异步通信的基本单元,由起始位、数据位、校验位(可选)、停止位组成。帧格式必须在收发双方完全一致。
1.4 帧格式参数详解
| 字段 | 长度 | 电平逻辑 | 作用 |
|---|---|---|---|
| 起始位 | 1 bit | 高 → 低(下降沿) | 通知接收方开始采样 |
| 数据位 | 5~9 bit(常用 8 bit) | LSB 先传(低位在前) | 承载有效数据载荷 |
| 校验位 | 0 或 1 bit | 奇/偶校验逻辑 | 检错(可选) |
| 停止位 | 1、1.5 或 2 bit | 高电平(恢复空闲态) | 帧间隔、同步恢复 |
实战要点:中断服务函数中,每次触发 RX 中断时,硬件已经完成了起始位检测、数据位采样和停止位验证。驱动开发者只需从数据寄存器中读取已组装好的字节,无需逐位处理。
1.5 常见 UART 配置速查
- 8N1:8 数据位 + 无校验 + 1 停止位 —— 最常用,兼容性最好
- 8E1:8 数据位 + 偶校验 + 1 停止位 —— 工业现场抗干扰
- 8O1:8 数据位 + 奇校验 + 1 停止位 —— 部分旧设备协议
- 9N1:9 数据位 + 无校验 + 1 停止位 —— 多机通信地址帧