1. UART协议概述:从并行到串行的演进之路
各位同学,咱们今天正式开讲UART。在嵌入式这行摸爬滚打这么多年,我始终觉得UART是单片机工程师最该吃透的外设之一。为什么?因为它是你调试时最可靠的伙伴,也是很多复杂通信协议的基础。
先别急着看寄存器,咱们得把基础概念理清楚。这一节,我带你看看串行通信和并行通信到底差在哪,UART是怎么一步步走到今天的,以及它在嵌入式系统里到底扮演什么角色。
1.1 串行通信 vs 并行通信:一根线 vs 一堆线
说白了,通信就是传数据。数据是一串0和1,怎么从A点搬到B点?
并行通信,就是一次搬一堆。比如8位数据,用8根数据线同时传。速度快不快?快。但代价也大——线多、引脚多、抗干扰差,长距离基本没戏。
串行通信,就是一根线,一个bit一个bit地传。慢吗?其实不慢。现在串口速率动不动几Mbps,够用了。关键是省线、省引脚、抗干扰强。
我早年做过一个项目,要在两块板子之间传数据,距离大概两米。一开始想用并行,结果发现光数据线就得十几根,还得考虑同步时钟。后来换成UART,三根线(TX、RX、GND)搞定,调试起来也省心。
| 对比项 | 串行通信 | 并行通信 |
|---|---|---|
| 数据传输方式 | 逐位传输 | 多位同时传输 |
| 所需信号线 | 少(通常2~3根) | 多(至少8根以上) |
| 传输距离 | 远(可达数十米) | 近(通常1米以内) |
| 抗干扰能力 | 强 | 弱 |
| 硬件成本 | 低 | 高 |
| 典型应用 | UART、SPI、I2C | 并口打印机、SRAM总线 |
核心观点:串行通信用时间换空间,并行通信用空间换时间。在嵌入式系统里,引脚资源比金子还贵,所以串行通信成了主流。
1.2 UART的历史与演进:从电传到单片机
UART的全称是Universal Asynchronous Receiver/Transmitter,通用异步收发器。这玩意儿的历史,比你我想象的都长。
最早可以追溯到电报时代。你想想看,摩尔斯电码不就是串行传输吗?一个点一个划,按顺序发。后来计算机出现了,需要和终端设备通信,于是RS-232标准在1960年代诞生了。
RS-232用正负电压表示逻辑1和0,传输距离能到15米左右。那时候的UART还是独立的芯片,比如经典的8250、16550。我记得刚入行那会儿,还在老式工控板上见过这些DIP封装的UART芯片,个头不小。
到了单片机时代,UART被集成到了芯片内部。你买一颗STM32或AVR,里面已经自带UART外设了。只需要配几个寄存器,就能收发数据。这个变化太重要了——硬件成本几乎为零,开发门槛大幅降低。
UART的演进有几个关键节点:
- 1960年代:RS-232标准发布,定义了串行通信的电气特性
- 1980年代:独立UART芯片(8250、16450、16550)成为PC标配
- 1990年代:UART被集成到单片机中,成为标准外设
- 2000年代至今:UART速率不断提升,支持IrDA、LIN等变种协议
个人经验:我曾经在一个老项目里维护过基于8250 UART的通信代码。那会儿没有现成的库,得自己操作寄存器、处理中断、管理FIFO。虽然麻烦,但那段经历让我对UART的底层机制理解得特别透彻。所以我不建议你一开始就全用HAL库,偶尔看看寄存器,没坏处。
1.3 UART在嵌入式系统中的地位:调试之眼,通信之基
UART在嵌入式系统里到底有多重要?我这么说吧——没有UART,很多嵌入式开发根本没法做。
你想想看,单片机跑起来之后,你怎么知道它内部发生了什么?LED闪烁是一种方式,但信息量太少了。JTAG/SWD调试器当然好,但成本高、接线麻烦。这时候,UART就是最实用的调试手段。
我习惯在每一个项目里都保留一个UART口,用来打印调试信息。不管是系统启动日志、传感器数据、还是错误码,统统通过串口输出。配合一个USB转串口工具,在电脑上用串口助手一看,问题在哪一目了然。
除了调试,UART还是很多通信协议的基础:
- RS-232:传统的串口标准,工业设备上很常见
- RS-485:差分信号传输,抗干扰强,适合长距离和多机通信
- Modbus:工业自动化领域的主流协议,底层就是UART
- LIN总线:汽车电子里的低成本串行通信协议
- IrDA:红外通信,底层也是UART
说白了,UART就像嵌入式系统的“通用语”。不管是什么架构的单片机,几乎都带UART。学会了UART驱动开发,你就能和绝大多数外设、传感器、模块打交道。
避坑提醒:UART虽然简单,但坑也不少。比如波特率误差、电平不匹配、中断处理不当导致丢数据……这些我在项目里都踩过。后面几章我会一个一个给你拆解,保证你少走弯路。
1.4 本章知识体系:一张图看懂UART
下面这张图,把UART的核心概念和它在嵌入式系统中的位置串起来了。你仔细看看,对后续学习会有帮助。
这张图把UART的三个核心维度串在了一起。左边是通信方式的本质区别,中间是技术演进脉络,右边是它在实际项目中的定位。你把这三点吃透了,后面学寄存器配置、中断处理、DMA传输,就有了根基。