2、串口通信基础:串行通信与并行通信的区别、同步与异步通信的概念、UART全称及历史沿革

串口通信(Serial Communication)是嵌入式系统、工业控制、传感器采集和计算机外设交互中最基础、最广泛的通信方式之一。理解串口通信,首先需要厘清几个核心概念:串行与并行、同步与异步,以及UART这一经典协议的来龙去脉。本章将从通信的本质出发,逐步拆解这些基础概念,帮助读者建立清晰的通信知识框架。

串口通信基础概念关系图 通信方式分类 串行通信 并行通信 逐位传输 节省引脚 多线同时传输 高速但线缆多 同步 vs 异步 同步通信(带时钟线) 异步通信(无时钟线) UART = 通用异步收发器 串行概念 并行概念 同步概念 异步概念

2.1 串行通信与并行通信的本质区别

通信的本质是信息在发送端与接收端之间的传递。根据数据位在传输介质上的排列方式,通信可分为串行通信与并行通信两大类。串行通信将数据字的各个比特位按顺序逐位发送,而并行通信则通过多条数据线同时发送多个比特位。以8位数据为例,并行通信需要8根数据线外加必要的控制线,而串行通信仅需1根数据线(半双工)或2根数据线(全双工)。

从工程实践角度,并行通信的优势在于单位时间内可传输的数据量更大,适合短距离、高速率场景,如早期的打印机并口(IEEE 1284)、存储器总线等。然而,并行通信存在两个显著问题:一是线缆成本高、占用PCB面积大;二是高速并行传输时,各数据线之间的信号偏移(Skew)和串扰(Crosstalk)会严重限制传输距离和速率。相比之下,串行通信虽然单次传输的数据量小,但通过提高时钟频率和差分信号技术,其总吞吐率已远超并行通信,例如PCIe、USB、SATA等高速串行总线已全面取代并行总线。

对比维度 串行通信 并行通信
数据传输方式 逐位顺序传输 多比特同时传输
所需信号线 1~2根(数据+地) 8~64根(数据+控制)
传输距离 可达数十米(RS-485) 一般不超过数米
抗干扰能力 强(差分信号更佳) 弱(易受线间串扰)
典型应用 UART、SPI、I2C、USB、PCIe 旧式打印机并口、存储器总线
成本 低(线缆少、连接器小) 高(线缆粗、连接器大)
经验提醒:在嵌入式系统设计中,若通信距离超过1米或环境电磁干扰较强,应优先选择串行通信方案。对于板级短距离高速传输(如DDR内存),并行总线仍有其存在价值,但需严格控制走线等长和阻抗匹配。

2.2 同步通信与异步通信的概念辨析

同步与异步的区分核心在于时钟信号的传递方式。同步通信要求发送端和接收端共享同一个时钟信号,数据在时钟边沿被采样,因此收发双方严格同步。典型的同步通信协议包括I2C(带SCL时钟线)、SPI(带SCLK时钟线)以及同步串行接口。同步通信的优点是传输效率高、协议简单,因为接收端无需恢复时钟;缺点是必须额外布置时钟线,且时钟频率受限于传输距离和线间电容。

异步通信则不需要共享时钟线,收发双方各自使用独立的本地时钟,通过约定的波特率(Baud Rate)来保证采样时刻的一致性。UART就是最典型的异步通信协议。异步通信的每个字符帧包含起始位、数据位、校验位(可选)和停止位。接收端通过检测起始位的下降沿来同步本地采样时钟,从而实现帧同步。异步通信的优势在于仅需两根信号线(TX和RX)即可实现全双工通信,且无需时钟线,布线简单;缺点是每个字符帧需要额外的起始位和停止位,有效数据率约为80%~87%,且收发双方的波特率误差必须控制在±2%以内(通常要求±1%)。

核心原理:异步通信的“异步”并非指收发双方没有时间关系,而是指没有独立的时钟信号线。接收端通过起始位触发采样定时器,以波特率的整数倍(通常为16倍)对数据位进行过采样,取中间时刻的电平值,以规避信号边沿的抖动和毛刺。

2.3 UART全称及历史沿革

UART的全称是Universal Asynchronous Receiver/Transmitter,即通用异步收发器。它既指一种通信协议,也指实现该协议的硬件模块(通常是芯片内部的一个外设IP核或独立芯片,如经典的8250、16550)。UART的历史可以追溯到20世纪60年代,最初由DEC公司为其PDP系列小型机开发,用于连接电传打字机(Teletype)和调制解调器(Modem)。1978年,National Semiconductor推出了业界著名的8250 UART芯片,随后被IBM PC采用,成为PC串口(COM口)的标准实现。1987年,16550 UART问世,增加了16字节的FIFO缓冲区,大幅降低了CPU中断频率,至今仍在工业界广泛使用。

UART的协议层定义非常简洁:空闲时TX线保持高电平;发送数据时先拉低一个位时间作为起始位,然后从最低位(LSB)开始依次发送5~8个数据位,可选发送1位奇偶校验位,最后发送1~1.5或2个停止位(高电平)。这种帧格式设计使得接收端无需外部时钟即可完成字节同步,且实现成本极低。UART的物理层标准则由RS-232、RS-422、RS-485等规范定义,其中RS-232使用±12V电平,传输距离约15米;RS-485使用差分信号,传输距离可达1200米,且支持多点组网。

2.4 实战场景:MCU间UART通信的帧格式设计

假设我们需要在两块STM32单片机之间通过UART实现传感器数据的可靠传输,波特率设定为115200bps,数据格式为8N1(8数据位、无校验、1停止位)。初始现象是:接收端偶尔出现乱码,且数据错位后长时间无法恢复。

分析判断过程如下:首先,检查波特率误差。STM32的USART外设时钟来自APB总线(通常为72MHz或84MHz),通过USARTDIV分频得到波特率。若APB时钟为72MHz,要得到115200bps,分频系数为72,000,000 / (16 × 115200) = 39.0625,取整为39,实际波特率为72,000,000 / (16 × 39) = 115,384.6bps,误差约0.16%,在允许范围内。其次,检查帧格式是否匹配——确认双方都配置为8N1。最后,检查信号线连接——TX接RX、RX接TX、GND共地。

实际操作步骤:

  1. 使用逻辑分析仪抓取TX引脚波形,确认起始位下降沿、数据位电平、停止位高电平是否符合预期。
  2. 在接收端代码中增加帧超时检测:若超过3个字符时间未收到完整帧,则强制重新同步。
  3. 在数据帧中加入帧头(如0xAA 0x55)和CRC校验字节,接收端校验失败则丢弃该帧并等待下一帧头。

结果对比:增加帧同步机制后,乱码率从约2%降至0.01%以下,且即使发生单字节错误,也能在下一帧恢复同步。风险与代价是:帧头+CRC增加了约20%的协议开销,但对于传感器数据采集场景,吞吐量仍远高于实际需求。

常见误区:初学者常误以为UART通信只要波特率相同就能可靠工作。实际上,收发双方的时钟源精度(晶振误差)、波特率分频取整误差、线路电容都会影响采样点位置。当波特率超过460800bps时,建议使用带PLL的USB转UART芯片(如FT232、CP2102)而非MCU内部RC振荡器。

2.5 常见误区与总结复盘

在串口通信的学习与调试中,以下误区最为常见:

  • 误区一:串行通信一定比并行通信慢。事实上,现代高速串行总线(PCIe 5.0单通道速率32GT/s)远超并行总线。串行通信通过差分信号和多电平编码(如PAM4)实现了极高的频谱效率。
  • 误区二:异步通信不需要时钟。异步通信的收发双方各自有独立的时钟源,只是没有单独的时钟线。波特率就是双方约定的“虚拟时钟”频率。
  • 误区三:UART就是RS-232。UART是协议层(帧格式、波特率),RS-232是电气层(电平标准)。UART可以通过RS-232、RS-485、TTL等不同物理层传输。
  • 误区四:校验位能保证数据可靠。奇偶校验只能检测奇数个比特错误,无法纠错,且对偶数个比特错误完全无效。工程中应使用CRC或更高级的校验机制。