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知识体系总览 UART异步串行通信 通信方式对比 串行:一根线,逐位传输 并行:多根线,同时传输 历史与演进 RS-232 → 独立UART芯片 → 单片机集成UART外设 嵌入式系统地位 调试利器:打印日志信息 协议基础:RS-485/Modbus/LIN 核心结论:UART是嵌入式工程师的必备技能 掌握UART = 掌握调试 + 掌握通信基础

这张图把UART的三个核心维度串在了一起。左边是通信方式的本质区别,中间是技术演进脉络,右边是它在实际项目中的定位。你把这三点吃透了,后面学寄存器配置、中断处理、DMA传输,就有了根基。