二、串口通信基础:串行与并行、同步与异步、UART与USART、常见串口协议对比

串口通信(Serial Communication)是嵌入式系统、工业控制、仪器仪表和物联网设备中最基础也最常用的通信方式之一。理解串口通信的基本概念,是后续进行UART驱动开发、协议调试和多机通信实战的基石。本章将从四个核心维度展开:串行与并行通信的本质区别、同步与异步通信的时序机制、UART与USART的异同点,以及RS-232、RS-485、TTL三种常见串口电气协议的工程选型对比。通过理论讲解、对比表格和实战案例,帮助您建立清晰的串口通信知识框架。

串口通信基础概念关系与协议选型图 串行 vs 并行通信 • 串行:1根数据线,按位依次传输,节省IO • 并行:8/16/32根数据线同时传输,速率高 • 串行优势:远距离、抗干扰、布线简单 • 并行劣势:线间串扰、成本高、距离短 同步 vs 异步通信 • 同步:共享时钟线,数据与时钟同步传输 • 异步:无时钟线,靠起始位/停止位对齐 • 同步效率高,适合高速、短距离(如SPI) • 异步灵活,适合低速、远距离(如UART) UART vs USART • UART:通用异步收发器,仅支持异步模式 • USART:通用同步/异步收发器,支持两种模式 • USART可配置为SPI、I2C等同步协议 • 工程中UART更常用,USART更灵活 常见串口协议对比 • TTL:0~3.3V/5V,板级通信,距离<1m • RS-232:±3~15V,点对点,距离<15m • RS-485:差分信号,多点组网,距离<1200m • 选型依据:距离、速率、节点数、抗干扰 核心结论 UART基于异步串行原理,TTL/RS-232/RS-485是不同电气层标准,USART是UART的增强版 选型速查: • 板级调试/传感器 → TTL(直连MCU) • 工控/短距PC通信 → RS-232(DB9接口) • 工业现场/多节点 → RS-485(差分总线) • 高速同步外设 → USART(SPI模式)

2.1 串行与并行通信:从物理链路到工程取舍

2.1.1 核心原理:数据通道的维度差异

串行通信(Serial Communication)是指数据在一根数据线(或一对差分线)上按位(bit)依次传输的方式。发送端将并行数据(如8位字节)转换为串行比特流,接收端再将其还原为并行数据。并行通信(Parallel Communication)则使用多根数据线同时传输一个数据字的各个位,例如8位并行通信需要8根数据线,16位则需要16根。

从信息论角度看,并行通信在相同时钟频率下具有更高的理论带宽,但工程实践中并行通信面临严重挑战:线间串扰(Crosstalk)、信号偏移(Skew)和布线成本。当频率超过几十MHz时,并行数据线之间的时序对齐变得极其困难,这也是为什么现代高速总线(如PCIe、USB、SATA)全部转向串行差分架构。

2.1.2 判断方法:如何选择串行还是并行

在实际项目选型中,可依据以下维度进行判断:

  • 传输距离:距离超过1米,优先选择串行;并行只适合PCB板级或极短距离。
  • 速率需求:若需要Gbps级速率,必须选择高速串行(带SerDes);若仅需几十Mbps且距离很近,并行仍可考虑。
  • IO资源:MCU引脚有限时,串行(2根线)明显优于并行(8根以上)。
  • 抗干扰要求:工业环境强电磁干扰下,串行差分信号(如RS-485)远优于并行单端信号。
经验提醒:很多初学者误以为并行一定比串行快。实际上,现代串行通信通过提高时钟频率(如USB 3.0的5Gbps)和差分信号技术,已全面超越传统并行总线。在嵌入式领域,除了内存接口(DDR)和LCD并口外,几乎所有外设通信都采用串行方式。

2.1.3 案例拆解:打印机并口到USB的演进

早期打印机使用IEEE 1284并行接口(DB25),理论速率可达2MB/s,但线缆长度限制在2米以内,且线缆粗重、成本高。随着USB 2.0(480Mbps)和USB-C的普及,打印机全面转向USB串行接口。这一演进的核心驱动力是:串行接口在更少的引脚上实现了更高的速率,同时线缆更细、成本更低、支持热插拔。这个案例说明,工程选型不能只看理论带宽,还要综合考虑物理实现、成本和用户体验。

2.1.4 常见误区与总结

风险提示:在PCB设计中,若必须使用并行总线(如MCU与FPGA之间的数据总线),务必控制走线等长(公差±50mil以内),并添加串联端接电阻(22Ω~33Ω)抑制反射。不要以为并行总线只要连上就能高速工作,信号完整性设计至关重要。

总结:串行通信以时间换空间,并行通信以空间换时间。在嵌入式领域,串行通信是主流,理解其原理是掌握UART、SPI、I2C等协议的基础。

2.2 同步与异步通信:时钟的“有”与“无”

2.2.1 核心原理:时钟在通信中的角色

同步通信(Synchronous Communication)要求发送端和接收端共享同一个时钟信号。发送端在时钟的上升沿或下降沿驱动数据,接收端在相同的时钟边沿采样数据。典型代表是SPI(Serial Peripheral Interface)和I2C(Inter-Integrated Circuit),它们都有专门的SCLK(串行时钟)线。

异步通信(Asynchronous Communication)则没有独立的时钟线。收发双方必须预先约定相同的波特率(Baud Rate),即每秒传输的码元数。发送端以起始位(Start Bit)标志数据帧的开始,接收端利用本地时钟在起始位下降沿后,在每一位的中心点进行采样。UART(Universal Asynchronous Receiver/Transmitter)就是最典型的异步串行通信协议。

2.2.2 判断方法:同步与异步的适用场景

对比维度同步通信(SPI/I2C)异步通信(UART)
时钟线有(SCLK)无
数据帧结构无起始/停止位,连续传输起始位+数据位+校验位+停止位
传输效率高(无额外开销)较低(约20%开销)
硬件复杂度较高(需时钟同步)低(只需波特率匹配)
典型速率SPI可达几十Mbps通常≤1Mbps
适用场景板级高速外设(Flash、ADC)跨设备、远距离、低速通信

2.2.3 案例拆解:UART异步通信的时序分析

假设UART配置为:波特率9600bps,8个数据位,无校验,1个停止位(8N1)。发送一个字节0x55(二进制01010101)时,帧结构如下:

空闲(高电平)→ 起始位(低电平)→ D0(1) → D1(0) → D2(1) → D3(0) → D4(1) → D5(0) → D6(1) → D7(0) → 停止位(高电平)

每位持续时间为1/9600 ≈ 104.17μs。接收端在检测到起始位下降沿后,等待半个位时间(52μs)确认仍是低电平,然后在每个位中心点采样。这种“过采样+中心采样”机制能有效避免信号边沿抖动带来的误判。

关键参数:波特率误差必须控制在±2%以内。若发送端波特率为9600,接收端为9800(误差2.08%),连续传输多字节后累积误差会导致采样点偏移到错误位置。工程中建议使用晶振精度±20ppm的时钟源,并避免使用内部RC振荡器进行高速UART通信。

2.2.4 常见误区与总结

误区一:认为同步通信一定比异步通信快。实际上,同步通信的速率受限于时钟线质量和从设备响应时间,I2C标准模式仅100kbps。误区二:混淆“同步”与“并行”。同步通信可以是串行的(如SPI),也可以是并行的(如DDR内存)。误区三:忽略波特率误差。在长帧传输(如Modbus协议)中,波特率误差累积可能导致帧错误。

总结:同步通信适合高速、短距离、从设备固定的场景;异步通信适合设备间无公共时钟、距离较远、速率要求不高的场景。UART作为异步通信的代表,其简单性和通用性使其成为嵌入式系统调试和通信的首选。

2.3 UART与USART:从“异步专用”到“同步兼通”

2.3.1 核心原理:硬件外设的功能差异

UART(Universal Asynchronous Receiver/Transmitter)是通用异步收发器,硬件上仅支持异步串行通信。它包含发送移位寄存器、接收移位寄存器、波特率发生器、控制逻辑和FIFO缓冲区。UART的核心任务就是完成“并行→串行→并行”的转换,并处理起始位、停止位、校验位等帧格式。

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是通用同步/异步收发器,在UART的基础上增加了同步模式。在同步模式下,USART可以输出时钟信号(SCLK),支持SPI协议;部分MCU的USART还支持LIN(Local Interconnect Network)、IrDA(红外)和智能卡协议。例如STM32的USART外设,在同步模式下可配置为SPI主机,时钟极性和相位均可编程。

2.3.2 判断方法:何时选择UART,何时选择USART

  • 仅需异步串口(如连接PC串口、GPS模块、蓝牙模块):选择UART即可,配置简单。
  • 需要灵活切换同步/异步(如既想接SPI Flash,又想接串口屏):选择USART,一外设两用。
  • 引脚复用紧张:USART的同步模式可复用为SPI,节省一个SPI外设资源。
  • 低功耗设计:UART比USART功耗略低(无同步时钟输出),但差异不大。

2.3.3 案例拆解:STM32 USART复用为SPI驱动Flash

某项目需要同时使用一个UART连接PC调试和一个SPI接口连接外部Flash存储日志。但MCU(STM32F103)的SPI1已被LCD占用,SPI2被SD卡占用。此时可将USART2配置为同步模式,复用为SPI主机:

// 伪代码示例:USART2同步模式配置
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_SynchronousMode = ENABLE;  // 开启同步模式
USART_InitStructure.USART_CPOL = USART_CPOL_Low;      // 时钟极性
USART_InitStructure.USART_CPHA = USART_CPHA_1Edge;    // 时钟相位
// 此时USART2_CK引脚输出SCLK,TX引脚输出MOSI,RX引脚输入MISO

通过这种方式,在不增加硬件成本的情况下解决了外设资源冲突。但需要注意:USART同步模式的最高速率通常低于专用SPI外设(STM32F103的USART同步模式最高4.5Mbps,而SPI可达18Mbps),且不支持SPI从机模式。

2.3.4 常见误区与总结

风险提示:不要将USART的同步模式与SPI完全等同。USART同步模式不支持SPI的片选信号(NSS)自动管理,需要手动控制GPIO作为片选;且数据帧格式固定为8位或9位,无法像SPI那样灵活配置。若项目需要高速SPI(>10Mbps)或复杂SPI时序,请使用专用SPI外设。

总结:UART是基础,USART是增强。在资源紧张或需要灵活配置时,USART的同步模式是很好的补充方案,但不应替代专用外设。

2.4 常见串口协议对比:TTL、RS-232、RS-485

2.4.1 核心原理:电气层标准的差异

TTL(Transistor-Transistor Logic)电平是MCU内部使用的标准,逻辑“0”为0V~0.8V,逻辑“1”为2V~5V(取决于供电电压)。TTL串口直接使用MCU的UART引脚,无需额外转换芯片,适合PCB板级通信。

RS-232(Recommended Standard 232)是早期PC串口标准,采用负逻辑:逻辑“0”为+3V~+15V,逻辑“1”为-3V~-15V。这种高电压摆幅提高了抗干扰能力,但需要电平转换芯片(如MAX3232)将TTL电平转换为RS-232电平。

RS-485(Recommended Standard 485)采用差分信号传输,使用A、B两根线,逻辑“1”为A-B电压差+2V~+6V,逻辑“0”为A-B电压差-2V~-6V。差分信号具有极强的共模干扰抑制能力,支持多点组网(最多32个节点),传输距离可达1200米。

2.4.2 对比表格:三大协议工程特性

特性TTLRS-232RS-485
信号方式单端单端差分
逻辑电平0~3.3V/5V±3~15VA-B电压差±2~6V
最大速率1Mbps(实际)115.2kbps(典型)10Mbps(短距离)
最大距离<1m15m1200m
节点数1对11对11对32(标准)
接口类型排针/杜邦线DB9/DB25接线端子/DB9
抗干扰能力弱中强
典型应用MCU间通信、传感器PC串口、老式设备工业总线、楼宇自控

2.4.3 案例拆解:工业现场RS-485组网实战

某工厂需要监控12个温度传感器节点,节点分布在车间不同位置,最远距离约300米,环境存在电机启停带来的电磁干扰。方案选型过程如下:

  1. 排除TTL:距离超过1米,TTL电平无法可靠传输。
  2. 排除RS-232:RS-232最大距离15米,且只能点对点,无法满足12节点组网需求。
  3. 选择RS-485:采用差分信号,抗干扰能力强;支持多点组网,12个节点在32节点限制内;300米距离在1200米范围内。

实际实施中,每个传感器节点使用MAX3485芯片(3.3V供电的RS-485收发器)将TTL电平转换为RS-485差分信号。总线两端各加一个120Ω终端匹配电阻,防止信号反射。通信协议采用Modbus RTU,主站轮询各从站地址。实测在电机启动瞬间,总线误码率从无终端电阻时的1.2%降至0.01%以下。

工程要点:RS-485总线必须采用“手拉手”菊花链拓扑,避免星型连接;终端电阻只在总线两端各接一个(120Ω),中间节点不接;总线空闲时A-B电压差应大于200mV,否则接收端可能误判。建议使用带自动方向控制的RS-485收发器(如MAX13487)简化软件设计。

2.4.4 常见误区与总结

误区一:认为RS-485是“高速”总线。实际上,RS-485在1200米距离时速率只能降到100kbps以下,速率与距离成反比。误区二:忽略共模电压范围。RS-485的共模电压范围是-7V~+12V,超出范围会损坏收发器,需使用隔离型RS-485模块(如ISO3082)。误区三:混淆“协议”与“物理层”。RS-232/RS-485只是电气层标准,不定义数据帧格式,实际通信协议(如Modbus、Profibus)需另行设计。

总结:TTL适合板级调试,RS-232适合短距离PC通信,RS-485适合工业现场长距离多点组网。选型时需综合考虑距离、速率、节点数、抗干扰和成本五个维度。

本章核心回顾:串行通信以时间换空间,是嵌入式通信的主流;异步通信靠起始/停止位对齐,UART是其典型实现;USART在UART基础上增加同步模式,提供更多灵活性;TTL/RS-232/RS-485是三种不同电气层标准,分别适用于板级、短距离点对点和长距离多点组网场景。掌握这些基础概念,后续章节的UART驱动开发和多机通信实战将水到渠成。