2、UART物理层:RS232、TTL、RS485等电平标准对比归纳总结
做UART通信这么多年,我踩过最大的坑,往往不是协议解析,而是物理层没选对。信号线忽高忽低,通信断断续续,最后发现是电平不匹配——说白了,电压都没对上,数据怎么可能对?
这一章,咱就把常见的三种物理层标准掰开揉碎了讲。你想想看,TTL、RS232、RS485,名字听着差不多,实际用起来天差地别。我会用实际项目的教训,帮你一次理清。
2.1 为什么物理层这么重要?
UART协议是异步的,只关心时序,不关心电压是多少。但物理层决定了:高电平是多少伏?低电平是多少伏?能传多远?抗干扰怎么样?
咱们平时说的“串口”,大多数时候指的是RS232接口(DB9那种)。但嵌入式设备内部,芯片之间走的往往是TTL电平。工业现场长距离通信,又必须用RS485。所以,搞懂这三者的区别,是做硬件和嵌入式开发的必修课。
2.2 TTL电平——芯片内部的最爱
TTL(Transistor-Transistor Logic)电平,是UART最原始的形态。逻辑1约2.4V~5V,逻辑0约0V~0.8V。单端信号(一根信号线对地)。
- 电压范围: 0~5V(3.3V系统也一样,高电平约3.3V)
- 传输距离: 一般不超过1米,线长了波形就塌了
- 抗干扰: 较差,共模噪声会直接叠加在信号上
- 常见场景: MCU与传感器、模块之间的板级通信
技巧: 我习惯在TTL信号线上串一个100Ω电阻,靠近发送端放。可以抑制反射和过冲,尤其是走线超过10cm的时候效果很明显。
2.3 RS232电平——负逻辑的“反着来”
RS232定义了一套负逻辑:逻辑1是-3V~-15V,逻辑0是+3V~+15V。你没看错,电压是反的。而且电平摆幅大,抗干扰能力比TTL强不少。
| 参数 | RS232 | TTL |
|---|---|---|
| 逻辑1电压 | -3V ~ -15V | 2.4V ~ 5V |
| 逻辑0电压 | +3V ~ +15V | 0V ~ 0.8V |
| 传输距离 | 约15米(标准) | 小于1米 |
| 信号类型 | 单端 | 单端 |
| 常用电平转换芯片 | MAX232、SP3232 | 无需转换 |
我记得刚接触RS232时,总搞不清正负逻辑。用示波器一看,空闲状态是负电压,发送起始位时突然跳到正电压——这才理解为什么叫“负逻辑”。
2.4 RS485电平——差分信号,远距离的王者
RS485是差分传输,靠A、B两根线的电压差来判断逻辑。A-B > +200mV是逻辑1,A-B < -200mV是逻辑0。共模电压允许范围-7V~+12V,抗干扰能力极强。
- 传输距离: 理论1200米(9600bps时)
- 节点数量: 标准32个节点(半双工),加驱动芯片可达256个
- 工作模式: 半双工、全双工(需4线)
- 常用芯片: MAX485、SP485、SN75176
你想想看,为什么工厂里到处是RS485?因为干扰大、距离远,TTL根本扛不住。RS232虽然也可以,但只有一对收发线,没法组网。
2.5 怎么选?一张图帮你决策
下面这张SVG图,我总结成了选择流程。你从UART核心出发,根据距离、抗干扰、组网需求,很快就能找到对应的物理层方案。
2.6 电平转换:必要的“翻译官”
实际项目中,很少直接用一个电平标准打通全局。比如MCU输出TTL,要连PC的RS232串口,中间就得加电平转换芯片。最经典的是MAX232,内部有电荷泵,把TTL的0/5V转换成RS232的±10V左右。
// 一个简单的RS485收发切换示例(伪代码)
void RS485_SendByte(uint8_t data) {
DE = 1; // 使能发送
RE = 0;
UART_Send(data);
delay(1); // 等待发送完成
DE = 0; // 切回接收
RE = 1;
}
我曾经在调试一个485网络时,发现主机发完数据后总线一直没释放,其他节点没法回复。查了半天,原来是DE引脚拉低的不够快,导致总线“占线”。后来在主循环里加了个死等发送完成标志,问题解决。
2.7 三种标准,一张表说清
| 特性 | TTL | RS232 | RS485 |
|---|---|---|---|
| 信号方式 | 单端 | 单端 | 差分 |
| 逻辑1电平 | 2.4V~5V | -3V~-15V | A-B > +200mV |
| 逻辑0电平 | 0V~0.8V | +3V~+15V | A-B < -200mV |
| 最大距离 | <1m | ≈15m | ≈1200m |
| 节点数 | 1对1 | 1对1 | 最多256个 |
| 抗干扰能力 | 弱 | 中 | 强 |
| 典型芯片 | 直接GPIO | MAX232 | MAX485 |
| 电压摆幅 | 约5V | 约24V | 约0.4V(差模) |
看到这张表,你应该心里有数了。TTL适合板级,RS232适合桌面级,RS485适合工业级。选错了,轻则不通,重则烧板。
最后一个小建议: 如果你做产品设计,尽量在原理图上预留三种电平的兼容接口,哪怕当前只用TTL。我吃过这种亏:产品量产了,客户突然要求加长传输距离,结果板子没法改,只能重新打样,浪费了时间和钱。