1. UART协议概述:从基础到实战

1.1 UART是什么?

UART,全称Universal Asynchronous Receiver/Transmitter,通用异步收发器。说白了,就是一种让两个设备之间通过一根线发数据、一根线收数据的通信方式。

我经常跟刚入行的工程师这么解释:UART就像两个人打电话,但不需要共享时钟。你这边说一句,那边听一句,只要约定好语速(波特率),就能正常交流。

UART的核心特点就三个:

  • 异步:收发双方没有共享时钟信号
  • 全双工:可以同时发送和接收
  • 帧结构:数据以帧为单位传输,每帧包含起始位、数据位、校验位和停止位
关键概念:UART不是协议标准,而是一种硬件接口。它只定义了电气特性和帧格式,上层协议(如Modbus、RS-232)才是真正定义数据含义的东西。

1.2 UART的历史:从电传打字机到物联网

UART的历史其实挺有意思的。它最早可以追溯到1960年代的电传打字机时代。那时候计算机和终端之间需要通信,但计算机速度太快,终端太慢,需要一个中间层来缓冲数据。

我记得看过一份老资料,早期的UART是用分立元件搭的,一个芯片能占半块板子。直到1970年代,Intel推出了8250 UART芯片,才真正把UART集成到单芯片里。后来PC时代,16550 UART成了标配,它内置了16字节的FIFO缓冲区——这在当时可是个大突破。

为什么FIFO重要?因为如果没有FIFO,CPU每收到一个字节就要中断一次。波特率高了以后,CPU根本忙不过来。16550的16字节FIFO让CPU可以攒一批数据再处理,效率提升很明显。

到现在,UART几乎成了微控制器的标配外设。你随便拿一个STM32、ESP32或者AVR,里面至少都有2-3个UART模块。物联网时代,UART更是连接Wi-Fi模块、蓝牙模块、GPS模块的主力接口。

1.3 UART与USART的区别:一字之差,天壤之别

这个问题我面试时经常问。很多人觉得UART和USART差不多,其实差别很大。

特性 UART USART
全称 Universal Asynchronous Receiver/Transmitter Universal Synchronous/Asynchronous Receiver/Transmitter
同步模式 仅异步 同步 + 异步
时钟信号 无独立时钟线 支持外部时钟线(SCLK)
通信速率 受限于波特率精度 同步模式下可达更高速度
硬件复杂度 较低 较高(多了时钟逻辑)
典型应用 RS-232、RS-485、TTL串口 SPI模式、智能卡接口、IrDA

简单来说:USART = UART + 同步能力。USART在异步模式下就是UART,但多了同步模式,可以输出时钟信号,像SPI一样工作。

我在一个项目中遇到过这种情况:用STM32的USART驱动一个需要时钟同步的智能卡读卡器。如果当时用的是纯UART,就得额外用GPIO模拟时钟,麻烦得很。USART直接硬件支持,省了不少事。

选型建议:如果只是做普通的串口通信(比如和PC通信、驱动Wi-Fi模块),UART完全够用。如果未来可能需要同步模式(比如驱动智能卡、红外通信),选USART更灵活。

1.4 UART的应用场景:无处不在的串口

你想想看,现在哪个嵌入式设备没有串口?我列几个典型的:

  • 调试接口:这是最常见的用途。产品开发阶段,通过UART输出日志、打印调试信息。我习惯在每一个嵌入式项目里都留一个UART调试口,哪怕量产时不用,开发阶段也能救命。
  • 模块通信:Wi-Fi模块(ESP8266/ESP32)、蓝牙模块(HC-05/HC-06)、GPS模块、4G/5G模块,几乎都是用UART和主控通信。
  • 工业总线:RS-485基于UART,是工业自动化最常用的总线之一。Modbus RTU协议就是在UART帧上跑的。
  • 设备配置:很多网络设备(交换机、路由器)的Console口就是UART,通过串口线连接电脑进行初始配置。
  • 老旧设备互联:一些老仪器、老设备只有串口,新系统要对接就得用UART。
注意:UART的通信距离有限。TTL电平的UART一般只能传1-2米。如果需要长距离传输,要加电平转换芯片,转成RS-232(约15米)或RS-485(约1200米)。

1.5 UART知识体系总览

下面这张图是我自己整理的UART知识体系,涵盖了从物理层到应用层的核心内容。后面的章节会逐一展开。

UART知识体系总览 物理层 电气特性 · 电平标准(TTL / RS-232 / RS-485) · 波特率 · 接线方式 数据链路层 帧格式 · 起始位 · 数据位(5-9位) · 校验位(无/奇/偶) · 停止位(1/1.5/2位) 驱动层 寄存器配置 · 中断处理 · FIFO管理 · DMA传输 · 波特率发生器 应用层 Modbus协议 · AT指令 · 自定义协议 · 数据解析 · 错误处理 本课程重点

这张图把UART的知识分成了四层:物理层管电平标准和接线,数据链路层管帧格式,驱动层管寄存器配置和中断,应用层管协议解析。我们这门课会从下往上,一层一层吃透。

嗯,第一章就到这里。内容不多,但都是基础。后面的章节会深入每个细节,包括帧格式的每一位怎么配、波特率误差怎么算、中断怎么处理——都是实战干货。