1、UART基础概念:什么是UART、异步传输原理、串行通信与并行通信对比
各位同学,咱们今天正式开讲UART。说实话,这个接口太常见了——你随便拿块单片机,上面至少有一两个UART外设。我做了十几年嵌入式,调试板子时用得最多的就是它。为什么?因为它简单、可靠,而且几乎所有的MCU都原生支持。
但越是基础的东西,越容易出问题。我记得刚入行那会儿,有个项目死活调不通,最后发现是波特率对不上。嗯,这种坑,咱们今天就从根上把它讲透。
1.1 什么是UART?
UART,全称是Universal Asynchronous Receiver/Transmitter,通用异步收发器。说白了,它就是一个负责把数据“串行化”发送和接收的硬件模块。
你想想看,MCU内部处理数据都是并行的——8位、16位、32位一次搞定。但数据要传到外面去,线太多不现实。UART的作用就是:把并行数据转成串行,一根线发出去;再把收到的串行数据转回并行,交给CPU处理。
核心要点:UART不是通信协议,它是硬件。它只负责物理层的串并转换,而数据帧格式、校验方式这些,由软件和协议决定。
UART通信只需要三根线:
- TXD(Transmit Data)——发送数据线
- RXD(Receive Data)——接收数据线
- GND(Ground)——共地
注意,两个设备之间要交叉连接:A的TXD接B的RXD,A的RXD接B的TXD。这个我见过有人接反过,结果怎么调都不通。
1.2 异步传输原理
UART是异步的,意思是收发双方没有独立的时钟线。那它们怎么同步?靠的是约定好的波特率,以及数据帧里的起始位和停止位。
我习惯把异步传输比作两个人打电话:
- 你开始说话前,先喊一声“喂”(起始位)
- 然后说内容(数据位)
- 说完喊“over”(停止位)
- 双方约定好语速(波特率)
没有时钟线,全靠约定和帧结构来对齐。这就是异步传输的本质。
数据帧结构
一个标准的UART数据帧长这样:
起始位(1bit) + 数据位(5~8bit) + 校验位(0/1bit) + 停止位(1/1.5/2bit)
举个例子,最常用的8N1配置:
1位起始位 + 8位数据位 + 无校验 + 1位停止位 = 10位/帧
发送一个字节' A '(0x41,二进制01000001),波形是这样的:
空闲(高) → 起始位(低) → LSB(1) → bit1(0) → bit2(0) → bit3(0) → bit4(0) → bit5(0) → bit6(1) → bit7(0) → 停止位(高) → 空闲(高)
个人经验:我建议初学者用逻辑分析仪抓一次UART波形,亲眼看看起始位怎么拉低、数据位怎么翻转、停止位怎么恢复高电平。看懂了波形,UART就懂了一半。
波特率
波特率就是每秒传输的符号数。UART里一个符号就是1位,所以波特率 = 比特率。
| 波特率 | 每比特时间 | 8N1帧传输时间 | 常见用途 |
|---|---|---|---|
| 9600 | 104.17 μs | 1.04 ms | 调试终端、GPS模块 |
| 115200 | 8.68 μs | 86.8 μs | 蓝牙模块、传感器 |
| 921600 | 1.09 μs | 10.9 μs | 高速数据传输 |
收发双方的波特率必须一致,误差一般要求在±2%以内。我曾经在一个项目里用了内部RC振荡器,温度一变化波特率就漂了,数据全乱。后来换了外部晶振,问题解决。
1.3 串行通信 vs 并行通信
咱们把这两种方式放在一起对比,你就能理解为什么UART这种串行方式能活到现在。
| 对比项 | 串行通信(UART) | 并行通信 |
|---|---|---|
| 数据线数量 | 1根(半双工)或2根(全双工) | 8根、16根或更多 |
| 传输距离 | 远(RS232可达15m,RS485可达1200m) | 短(通常<1m) |
| 抗干扰能力 | 强(差分信号更优) | 弱(线间串扰严重) |
| 传输速率 | 相对较低(典型115200bps) | 高(可达数百Mbps) |
| 硬件成本 | 低(线少、接口简单) | 高(线多、连接器贵) |
| 典型应用 | 调试口、传感器、GPS、蓝牙 | LCD屏、存储器总线、PCI |
你想想看,为什么现在串行接口越来越流行?USB、PCIe、SATA、以太网,全是串行的。原因很简单:线少、成本低、能传得远。并行通信虽然快,但到了高频,线间串扰和时序对齐会让你痛不欲生。
避坑指南:我曾经在一个产品里用并行总线连接两块板子,距离只有10cm,但频率一上50MHz就出错。最后改成串行差分传输,问题迎刃而解。所以,除非你特别需要极致吞吐量,否则优先选串行。
1.4 本章知识结构图
下面这张图把UART的核心概念串起来了,你可以把它当作本章的思维导图:
1.5 小结
这一章咱们把UART的底子打好了:
- UART是硬件,负责串并转换,不是协议
- 异步传输靠帧结构,起始位和停止位是同步的关键
- 波特率必须一致,误差要控制在±2%以内
- 串行通信在大多数场景下优于并行,尤其是远距离和低成本需求