2、UART硬件引脚与电气特性:TX、RX、GND、RTS/CTS流控引脚、RS232与TTL电平区别

做UART驱动开发,光会配寄存器可不够。你得先搞清楚硬件引脚在干什么,电平标准是什么。我见过不少工程师,软件写得飞起,结果一接上示波器,发现电平都不对——那真是白忙活一场。

这一章,咱们就把UART的物理层掰开揉碎讲清楚。

2.1 核心三根线:TX、RX、GND

最基本的UART通信,只需要三根线:

  • TX (Transmit):发送数据线
  • RX (Receive):接收数据线
  • GND (Ground):信号地线

连接方式很简单:设备的TX接对方的RX,RX接对方的TX,GND接GND。这叫交叉连接,也叫直连。

关键点:GND是参考地。没有它,信号电平就没有基准。我遇到过有人为了省一根线,只接TX和RX,结果通信时好时坏——其实就是地电位不一致导致的。

为什么叫异步传输?说白了,就是收发双方没有单独的时钟线。它们靠什么同步?靠双方约定好的波特率(每秒传输的符号数)。你想想看,如果两边波特率对不上,那收到的数据全是乱码。

2.2 硬件流控引脚:RTS/CTS

当数据量大的时候,光靠三根线可能不够用。比如,发送方拼命发,接收方处理不过来,数据就丢了。这时候就需要硬件流控。

常用的流控引脚是:

  • RTS (Request to Send):请求发送,输出信号
  • CTS (Clear to Send):允许发送,输入信号

工作流程是这样的:

  1. 设备A想发数据,先把RTS拉高(表示“我要发了”)。
  2. 设备B如果准备好了,就把CTS拉高(表示“来吧,我扛得住”)。
  3. 设备A看到CTS为高,才开始发送。
  4. 如果设备B忙不过来,就把CTS拉低,设备A就得暂停。

我的经验:在低速场景(如9600波特率),软件流控(XON/XOFF)也能凑合。但高速场景(如115200以上),我建议直接用硬件流控。以前做GPS模块驱动时,数据量一大,不用RTS/CTS就会丢包,加了之后稳得很。

2.3 RS232与TTL电平:天壤之别

这是新手最容易踩的坑。同样是UART,电平标准不同,直接连就会烧芯片。

2.3.1 TTL电平

TTL电平是单片机、嵌入式系统内部用的标准。特点:

  • 逻辑1:2.4V ~ 5V(常见3.3V或5V)
  • 逻辑0:0V ~ 0.8V
  • 信号范围窄,抗干扰能力弱
  • 传输距离短(一般不超过1米)

2.3.2 RS232电平

RS232是PC串口(DB9接口)用的标准。特点:

  • 逻辑1:-3V ~ -15V(负电压)
  • 逻辑0:+3V ~ +15V(正电压)
  • 信号范围宽,抗干扰能力强
  • 传输距离长(可达15米以上)

我把它们的区别整理成了一张表:

特性 TTL电平 RS232电平
逻辑1电压 2.4V ~ 5V -3V ~ -15V
逻辑0电压 0V ~ 0.8V +3V ~ +15V
信号极性 正逻辑 负逻辑
抗干扰能力 弱 强
传输距离 < 1米 ~ 15米
常见接口 单片机GPIO DB9串口

警告:千万不要把TTL电平直接接到RS232接口上!我曾经见过有人把3.3V的TX直接怼到RS232的RX上,结果RS232的负电压直接把单片机引脚烧了。必须用电平转换芯片(如MAX232)做转换。

2.4 电平转换:从TTL到RS232

实际项目中,经常需要让单片机(TTL)和PC(RS232)通信。这时候就需要电平转换芯片。

常用的芯片有:

  • MAX232:经典款,需要外接4个电容,支持双通道
  • SP3232:低功耗版本,适合电池供电设备
  • FT232RL:USB转串口芯片,内部集成了电平转换

连接方式大致如下:

单片机 TX (3.3V)  →  MAX232 T1IN  →  MAX232 T1OUT  →  DB9 Pin2 (RX)
单片机 RX (3.3V)  ←  MAX232 R1OUT ←  MAX232 R1IN  ←  DB9 Pin3 (TX)
GND               →  MAX232 GND   →  DB9 Pin5 (GND)

2.5 知识结构图

下面这张图帮你理清本章的核心脉络:

UART硬件引脚与电气特性知识结构 UART物理层 核心引脚 TX / RX / GND RTS / CTS 流控 电平标准 TTL:0~5V RS232:±3~15V 电平转换 MAX232 / SP3232 FT232RL (USB转串口) 避坑提醒 • TTL和RS232不能直连,必须用电平转换芯片 • 高速通信(115200+)建议使用硬件流控RTS/CTS • GND必须连接,否则信号无参考基准 • 连接时TX接RX,RX接TX,别接反了

2.6 实际项目中的注意事项

最后,分享几个我在项目中踩过的坑:

  • 电平匹配:现在很多单片机是1.8V或3.3V的,如果接到5V的TTL设备上,需要做电平转换(用MOS管或专用芯片)。
  • 长线传输:超过1米就别用TTL了,转成RS232或RS485。我以前在工厂调试时,TTL线拉了3米,数据全是错的。
  • 热插拔:RS232支持热插拔,但TTL不建议。我习惯先接好线再上电,避免瞬间电流冲击。
  • 地环路:如果两个设备都接了大地,GND连接可能形成地环路。这时候可以考虑用隔离芯片(如ADuM1201)。

个人习惯:我调试UART时,会先拿示波器看TX脚的波形。如果看到的是0~3.3V的方波,那就是TTL电平;如果是±5V以上的波形,那就是RS232。一眼就能判断,省得烧芯片。