UART 知识
UART(串口)学习笔记:协议、波特率、电平、收发写法。
收发写法
协议要点
UART 是异步⭐的,就是没有时钟线,一个 TX、一个 RX、一个 GND(除非已经共地)。
硬件流控(RTS/CTS):接收缓冲区快满时通过 CTS 让对方暂停发送,防止数据丢失,这两个算可选。
UART 接收时,硬件依靠波特率时钟将引脚上的跳变一位一位送到移位寄存器中,满 8 位后再放到接收数据寄存器中,此时 RXNE(接收寄存器非空)标志位置 1,触发接收中断。
波特率
波特率自适应
- 发送方先发特定字符(如
0x7F),接收方测量脉冲宽度自动计算波特率; - STM32 支持硬件自动波特率检测:利用起始位下降沿到特定边沿的时间推算。
波特率计算
波特率 = 时钟频率 / (分频系数 × 过采样倍数)
以 STM32 为例(APB 时钟 84MHz、过采样 16 倍):
BRR = 84000000 / (16 × 115200) = 45.57
取整为 45,实际波特率 = 84000000 / (16×45) = 116667,误差 = (116667-115200)/115200 ≈ 1.27%(±3% 以内可用)。
关键:误差不超过 ±3%,否则乱码;高波特率时误差更容易超标。
电平
三种电平的区别:RS485, RS232, TTL
USART
这里的 s 是 synchronous,增加了同步功能。