2、硬件接口与电气特性:RS-232、RS-485、TTL电平标准对比

做嵌入式开发,尤其是搞UART通信,第一关往往不是代码怎么写,而是硬件怎么接。我见过不少新手,拿着3.3V的TTL串口模块直接怼到RS-232的DB9接口上,结果要么没反应,要么冒烟。说白了,电平标准不匹配,神仙也救不了。

这一章,咱们就把RS-232、RS-485和TTL这三种最常见的电平标准掰开揉碎讲清楚。你搞懂了它们的电压范围、逻辑定义和物理接口,以后画板子、接线、排查故障,心里就有底了。

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

先看一张对比表,把最关键的参数列出来。我个人习惯,做项目前先拿这个表对照一下,避免选型翻车。

特性 TTL (3.3V/5V) RS-232 RS-485
逻辑1 (高电平) 2.0V ~ VCC (通常3.3V或5V) -3V ~ -15V A-B > +200mV
逻辑0 (低电平) 0V ~ 0.8V +3V ~ +15V A-B < -200mV
电压摆幅 0 ~ 3.3V 或 0 ~ 5V ±12V 典型 差分 ±1.5V ~ ±6V
传输方式 单端 (共地) 单端 (共地) 差分 (双绞线)
最大距离 几米 (通常 < 1.5m) 约 15m @ 9600bps 1200m @ 100kbps
最大节点数 点对点 (1对1) 点对点 (1对1) 最多256个 (半双工)
典型应用 板级通信、MCU与传感器 工控设备、老式PC外设 工业总线、远距离多机通信

嗯,这里要注意一点:RS-232的逻辑电平是反的。TTL里高电平是1,低电平是0;但RS-232里,-3V到-15V才是1,+3V到+15V反而是0。我第一次用示波器看RS-232波形时,差点以为自己接反了线。

2.2 TTL电平:板级通信的默认语言

TTL(Transistor-Transistor Logic)是咱们嵌入式开发中最常用的电平标准。MCU的UART引脚,默认就是TTL电平。3.3V的STM32,5V的AVR,输出高电平就是VCC,低电平就是GND附近。

关键点:

  • TTL是单端信号,发送和接收共用一个地线。地线没接好,数据全是乱码。
  • 驱动能力弱,线长了信号会衰减。我试过用TTL串口拉5米线,9600波特率勉强能跑,但偶尔丢字节。
  • 3.3V和5V的TTL不能直接互连,需要电平转换。我曾经偷懒直接连,结果烧了一个3.3V的传感器。
我的习惯: 做板级调试时,优先用TTL串口。直接焊排针,用USB转TTL模块连电脑,波特率设115200,调试信息刷刷地出。省事,稳定。

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

RS-232是串口通信的老祖宗。它用±12V的电压摆幅,抗干扰能力比TTL强不少。虽然现在PC上已经很少见了,但在工业设备、PLC、老式仪器仪表里,RS-232接口依然大量存在。

为什么电压要搞到±12V? 说白了,就是为了抗噪声。工业现场电磁干扰大,TTL那点电压幅度,线长一点就被噪声淹没了。RS-232把电压抬高到12V,信噪比上去了,传输距离就能到15米左右。

避坑指南: 我曾经在项目里直接用TTL串口去接一个RS-232的PLC,结果MCU的引脚被反向电压打坏了。后来老老实实加了MAX232电平转换芯片。记住:TTL和RS-232之间必须加转换芯片,比如MAX232、SP3232。

2.4 RS-485:远距离多机通信的王者

RS-485是差分信号传输,用两根线(A和B)的电压差来表示逻辑0和1。差分信号天然抗共模干扰,所以传输距离能到1200米,而且支持多节点挂载。

RS-485的核心优势:

  • 差分传输: 两根线绞在一起,外部噪声在两根线上产生的干扰几乎相同,差分接收器只认差值,噪声被抵消。
  • 多节点: 标准RS-485最多支持32个节点,用高阻抗芯片可以扩展到256个。
  • 半双工/全双工: 两线制是半双工(收发不能同时),四线制是全双工。工业上常用两线制,节省线缆。

我记得有一次做楼宇自动化项目,控制节点分布在整栋楼里,距离远、节点多。用RS-485总线,一根双绞线串起所有设备,稳定跑了三年没出过问题。

2.5 DB9接口定义与常见连接方式

DB9是RS-232最常用的物理接口。虽然标准定义了9个引脚,但实际通信只需要3根线:TXD、RXD、GND。

DB9公头/母头引脚定义(RS-232):

引脚号 信号名称 方向 说明
1 DCD 输入 载波检测
2 RXD 输入 接收数据
3 TXD 输出 发送数据
4 DTR 输出 数据终端就绪
5 GND - 信号地
6 DSR 输入 数据设备就绪
7 RTS 输出 请求发送
8 CTS 输入 清除发送
9 RI 输入 振铃指示

最常见的三种接线方式:

  1. 三线制(最常用): 只接TXD(3)、RXD(2)、GND(5)。适合大多数调试和简单通信场景。
  2. 五线制: 在三线基础上加RTS(7)和CTS(8),用于硬件流控。高速传输时防止数据溢出。
  3. 全串口: 所有9根线全接。用于Modem等需要握手信号的设备。
实战经验: 做嵌入式调试时,我99%的情况只用三线制。DB9公头接设备,母头接电脑串口,TXD和RXD交叉连接(设备TXD接电脑RXD,设备RXD接电脑TXD)。GND必须接,否则通信不稳定。

2.6 电平转换与硬件连接实战

实际项目中,MCU的TTL电平要转成RS-232或RS-485才能接外部设备。转换芯片是必须的。

TTL转RS-232: 用MAX232或SP3232。芯片内部有电荷泵,能把3.3V/5V升压到±12V。接线很简单:MCU的TXD接芯片的T1IN,芯片的T1OUT接DB9的TXD;RXD方向相反。

TTL转RS-485: 用MAX485或SP3485。芯片有DE(发送使能)和RE(接收使能)引脚。半双工模式下,DE和RE可以短接,用一个GPIO控制收发方向。

下面是一个典型的TTL转RS-485接线示意图:

MCU (TTL)          MAX485          RS-485总线
--------          -------          ----------
TXD  ------>  DI (驱动器输入)
RXD  <------  RO (接收器输出)
GPIO ------>  DE & RE (使能控制)
               A  ---------------> A线 (差分正)
               B  ---------------> B线 (差分负)
GND  ------>  GND               GND (屏蔽地)
我的建议: RS-485总线两端要加120Ω终端电阻,防止信号反射。如果节点数多、距离远,终端电阻是必须的。我见过有人没加电阻,总线在高速通信时波形振铃严重,数据错得一塌糊涂。

2.7 知识结构图:电平标准与接口选型

下面这张图总结了三种电平标准的适用场景和转换关系。你画板子前看一眼,选型就不会错。

UART电平标准与接口选型知识图 MCU TTL (3.3V/5V) TTL直连 (板级) RS-232 (±12V) RS-485 (差分) 无需转换 MAX232/SP3232 MAX485/SP3485 板级调试 传感器通信 工控设备 老式仪器 工业总线 楼宇自动化 选型要点:距离 < 1.5m 用TTL;距离 < 15m 用RS-232;距离 > 15m 或多节点用RS-485 转换芯片必须匹配电平,GND必须共地,RS-485总线两端加120Ω终端电阻

2.8 避坑总结

做UART硬件设计,我踩过的坑不少。总结几条血泪教训:

  • GND必须接: 不管用哪种电平标准,地线不接,通信就是玄学。我曾经调试一个设备,数据时好时坏,折腾了两天,最后发现是地线虚焊。
  • 电平转换不能省: TTL直接怼RS-232,轻则通信失败,重则烧芯片。MAX232才几块钱,别省这个钱。
  • RS-485终端电阻: 距离超过100米或者波特率高于9600,终端电阻必须加。不加的话,信号反射会导致数据错位。
  • DB9引脚别搞错: 公头和母头的引脚号是镜像的。焊接时一定要对照引脚定义图,我见过有人把TXD和RXD焊反了,结果数据发出去收不回来。