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 知识体系结构图
下面这张图帮你理清三种电平标准的选择逻辑:
2.7 实际项目中的选择建议
说了这么多,到底怎么选?我总结几条经验:
- 板级通信,距离 < 30cm:用 TTL,简单直接,成本最低。
- 需要连电脑、调试口:用 RS-232,买个 USB-232 转换器就行。
- 距离远、节点多、环境嘈杂:用 RS-485,差分信号抗干扰,还能组网。
- 如果拿不准:选 RS-485。它兼容性最好,大不了只接两个节点当点对点用。
最后说一句:不管选哪种标准,GND 一定要接。不接 GND 的串口通信,就像两个人隔着一堵墙喊话,信号飘忽不定。我见过太多「明明接了 TX 和 RX,为什么收不到数据」的案例,最后发现是 GND 没接。