二、串口通信基础:串行与并行、同步与异步、UART与USART、常见串口协议对比
串口通信(Serial Communication)是嵌入式系统、工业控制、仪器仪表和物联网设备中最基础也最常用的通信方式之一。理解串口通信的基本概念,是后续进行UART驱动开发、协议调试和多机通信实战的基石。本章将从四个核心维度展开:串行与并行通信的本质区别、同步与异步通信的时序机制、UART与USART的异同点,以及RS-232、RS-485、TTL三种常见串口电气协议的工程选型对比。通过理论讲解、对比表格和实战案例,帮助您建立清晰的串口通信知识框架。
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)远优于并行单端信号。
2.1.3 案例拆解:打印机并口到USB的演进
早期打印机使用IEEE 1284并行接口(DB25),理论速率可达2MB/s,但线缆长度限制在2米以内,且线缆粗重、成本高。随着USB 2.0(480Mbps)和USB-C的普及,打印机全面转向USB串行接口。这一演进的核心驱动力是:串行接口在更少的引脚上实现了更高的速率,同时线缆更细、成本更低、支持热插拔。这个案例说明,工程选型不能只看理论带宽,还要综合考虑物理实现、成本和用户体验。
2.1.4 常见误区与总结
总结:串行通信以时间换空间,并行通信以空间换时间。在嵌入式领域,串行通信是主流,理解其原理是掌握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.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 常见误区与总结
总结: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 对比表格:三大协议工程特性
| 特性 | TTL | RS-232 | RS-485 |
|---|---|---|---|
| 信号方式 | 单端 | 单端 | 差分 |
| 逻辑电平 | 0~3.3V/5V | ±3~15V | A-B电压差±2~6V |
| 最大速率 | 1Mbps(实际) | 115.2kbps(典型) | 10Mbps(短距离) |
| 最大距离 | <1m | 15m | 1200m |
| 节点数 | 1对1 | 1对1 | 1对32(标准) |
| 接口类型 | 排针/杜邦线 | DB9/DB25 | 接线端子/DB9 |
| 抗干扰能力 | 弱 | 中 | 强 |
| 典型应用 | MCU间通信、传感器 | PC串口、老式设备 | 工业总线、楼宇自控 |
2.4.3 案例拆解:工业现场RS-485组网实战
某工厂需要监控12个温度传感器节点,节点分布在车间不同位置,最远距离约300米,环境存在电机启停带来的电磁干扰。方案选型过程如下:
- 排除TTL:距离超过1米,TTL电平无法可靠传输。
- 排除RS-232:RS-232最大距离15米,且只能点对点,无法满足12节点组网需求。
- 选择RS-485:采用差分信号,抗干扰能力强;支持多点组网,12个节点在32节点限制内;300米距离在1200米范围内。
实际实施中,每个传感器节点使用MAX3485芯片(3.3V供电的RS-485收发器)将TTL电平转换为RS-485差分信号。总线两端各加一个120Ω终端匹配电阻,防止信号反射。通信协议采用Modbus RTU,主站轮询各从站地址。实测在电机启动瞬间,总线误码率从无终端电阻时的1.2%降至0.01%以下。
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适合工业现场长距离多点组网。选型时需综合考虑距离、速率、节点数、抗干扰和成本五个维度。