2. 物理层与电气特性:RS-232、RS-485、TTL 电平标准对比

聊 UART 协议,很多人一上来就写代码。但我得说,物理层搞不清楚,后面全是坑。你想想看,代码写得再漂亮,电平不匹配,一上电就把芯片烧了,那多冤。

这一节,咱们把三种最常见的物理层标准掰开揉碎讲清楚。TTL、RS-232、RS-485,它们到底差在哪?什么时候该用哪个?接口怎么接?

2.1 三种电平标准的核心差异

说白了,UART 在逻辑上只关心「0」和「1」。但到了物理层,怎么表示这两个状态,各家有各家的玩法。

标准 逻辑 1(高电平) 逻辑 0(低电平) 电压摆幅 传输距离
TTL (3.3V/5V) 2.0V ~ VCC 0V ~ 0.8V 3.3V 或 5V < 1 米(板级)
RS-232 -3V ~ -15V +3V ~ +15V 约 ±12V 约 15 米
RS-485 A-B > +200mV A-B < -200mV 差分 ±6V 可达 1200 米

关键点:TTL 是单端、正逻辑;RS-232 是单端、负逻辑;RS-485 是差分信号。这三者不能直接对接,必须加电平转换芯片。

2.2 TTL 电平——嵌入式开发的老朋友

做单片机开发,天天跟 TTL 打交道。STM32、ESP32、Arduino,这些芯片的 UART 引脚输出的就是 TTL 电平。

特点:

  • 电压范围窄,3.3V 或 5V
  • 抗干扰能力弱,线长了信号就变形
  • 适合板级通信,比如 MCU 和 WiFi 模块之间

我的习惯:做原型验证时,TTL 直接飞线没问题。但一旦线长超过 20cm,我就会加个 100Ω 的串联电阻,减少过冲。这招是从一次 SPI 通信异常里学来的。

2.3 RS-232——老当益壮的工业标准

RS-232 诞生得很早,当年电脑的串口就是它。它用 ±12V 的摆幅换来了更强的抗干扰能力。

为什么用负逻辑?

我个人理解,这跟早期电路设计有关。用负电压表示 1,是为了在长线传输时,即使电压衰减,还能保证逻辑电平的识别裕量。

典型应用场景:

  • 工业设备的调试串口
  • 老式 PLC、数控机床
  • 一些 GPS 接收模块

注意:MCU 的 TTL 引脚直接接 RS-232 设备,必烧!必须用 MAX232 这类电平转换芯片。我曾经见过一个实习生直接把 3.3V 的 TX 接到 RS-232 的 DB9 上,结果芯片冒烟了。

2.4 RS-485——远距离通信的王者

RS-485 用的是差分信号,两根线(A 和 B)传一路数据。它不依赖地线参考,所以抗共模干扰能力极强。

核心优势:

  • 差分传输,共模抑制比高
  • 支持多点通信,一条总线上最多挂 256 个节点
  • 传输距离远,1200 米没问题

什么时候选 RS-485?

你想想看,如果要在工厂里把几十个传感器连到一台主机上,距离几百米,TTL 肯定不行,RS-232 也只能点对点。这时候 RS-485 就是唯一的选择。

避坑指南:RS-485 总线两端必须加 120Ω 的终端匹配电阻。我曾经在一个项目中忘了加,结果总线上的信号反射严重,数据错得一塌糊涂。加了电阻之后,波形瞬间干净了。

2.5 常见接口引脚定义

不管用哪种电平标准,UART 的核心信号就那几个:TX、RX、GND。但 RS-232 和 RS-485 还有额外的控制线。

2.5.1 最基本的:TX、RX、GND

这是最简配置,三根线就能通信。注意交叉连接:设备的 TX 接对方的 RX。

我的习惯:画原理图时,我会在 TX 和 RX 旁边加个箭头标注方向。这样 PCB 布局时不容易搞反。别笑,我见过太多因为 TX/RX 接反而查了一整天 bug 的案例。

2.5.2 RS-232 的 DB9 接口

DB9 是 RS-232 最常用的连接器。9 个引脚,但实际通信只需要 3 根。

引脚号 信号名 方向 说明
2 RXD 输入 接收数据
3 TXD 输出 发送数据
5 GND - 信号地
7 RTS 输出 请求发送(流控)
8 CTS 输入 清除发送(流控)

RTS 和 CTS 是干嘛的?

这是硬件流控信号。简单说,当接收方来不及处理数据时,可以通过 CTS 告诉发送方「先别发了」。我早期做项目时基本不用这两个引脚,三线制就够了。但如果你做高速通信(比如 115200 以上),或者接收端处理能力有限,硬件流控能救命。

2.5.3 RS-485 的接线方式

RS-485 只有两根数据线:A(非反相)和 B(反相)。外加一根 GND 做参考。

  • A 接 A,B 接 B(同色相接)
  • 总线两端各加一个 120Ω 电阻
  • 如果节点数多,建议用双绞线

注意:RS-485 的 A/B 线不能接反。接反了,逻辑电平就反了,数据全错。我曾经在调试一个 485 网络时,怎么调都不对,最后发现是 A/B 线接反了。嗯,这种低级错误,犯过一次就记住了。

2.6 知识体系结构图

下面这张图帮你理清三种电平标准的选择逻辑:

UART 物理层标准选择逻辑 UART 物理层 TTL 电平 RS-232 RS-485 板级通信 3.3V/5V 摆幅 距离 < 1m 点对点通信 ±12V 摆幅 距离 ~15m 多点通信 差分信号 距离 ~1200m MCU 模块间通信 工控设备调试口 工业总线网络

2.7 实际项目中的选择建议

说了这么多,到底怎么选?我总结几条经验:

  1. 板级通信,距离 < 30cm:用 TTL,简单直接,成本最低。
  2. 需要连电脑、调试口:用 RS-232,买个 USB-232 转换器就行。
  3. 距离远、节点多、环境嘈杂:用 RS-485,差分信号抗干扰,还能组网。
  4. 如果拿不准:选 RS-485。它兼容性最好,大不了只接两个节点当点对点用。

最后说一句:不管选哪种标准,GND 一定要接。不接 GND 的串口通信,就像两个人隔着一堵墙喊话,信号飘忽不定。我见过太多「明明接了 TX 和 RX,为什么收不到数据」的案例,最后发现是 GND 没接。