从串口到SerDes接口进阶 - 第2节
一、RS232电平与TTL电平转换
做硬件设计这些年,我见过不少新手在串口通信上栽跟头。说白了,问题往往出在一个地方——电平不匹配。
TTL电平,我们平时用的最多。3.3V或5V代表逻辑“1”,0V代表逻辑“0”。这是芯片内部的标准。但RS232不一样,它用的是负逻辑:-3V到-15V代表逻辑“1”,+3V到+15V代表逻辑“0”。
为什么会这样?RS232设计于上世纪60年代,当时为了抗干扰,故意把电压摆幅拉大。你想想看,在工业现场,电缆可能走十几米,TTL那点电压早就被噪声淹没了。
关键区别总结:
- TTL电平:逻辑1 = 3.3V/5V,逻辑0 = 0V
- RS232电平:逻辑1 = -3V ~ -15V,逻辑0 = +3V ~ +15V
- 两者不能直接相连,必须做电平转换
我在项目中遇到过一件事。有个同事把单片机TX直接连到电脑串口,结果电脑串口烧了。嗯,这就是典型的电平不匹配导致的悲剧。RS232的±12V直接灌进TTL引脚,不烧才怪。
二、MAX232芯片应用
MAX232是TI(原Maxim)的经典芯片。说实话,这芯片我用了十几年,从来没让我失望过。
2.1 芯片内部结构
MAX232内部集成了两路驱动器和两路接收器。它最厉害的地方是内置了电荷泵,能把5V电源转换成±10V左右的RS232电平。
电荷泵的工作原理其实不复杂:通过内部振荡器控制电容充放电,实现电压倍增和反转。我习惯把它理解成“电压搬运工”——把5V搬成+10V,再搬出一份-10V。
2.2 典型电路连接
这是我最常用的接法,几乎每个串口项目都这么干:
// MAX232典型接线(以5V系统为例)
// 电源部分
VCC → 5V
GND → GND
C1+ → 1μF电容正极
C1- → 1μF电容负极
C2+ → 1μF电容正极
C2- → 1μF电容负极
// TTL侧(连接单片机)
T1IN → 单片机TX
R1OUT → 单片机RX
// RS232侧(连接DB9)
T1OUT → DB9的Pin2(RXD)
R1IN → DB9的Pin3(TXD)
我的经验:电容值不要随意改。MAX232数据手册推荐1μF,我试过用0.1μF,结果输出电平不够,通信不稳定。后来老老实实换回1μF,问题解决。
2.3 选型建议
MAX232家族有很多变体,我列个表方便你参考:
| 型号 | 供电电压 | 通道数 | 速率 | 适用场景 |
|---|---|---|---|---|
| MAX232 | 5V | 2发2收 | 120kbps | 经典款,通用 |
| MAX3232 | 3.3V | 2发2收 | 250kbps | 低压系统 |
| MAX3221 | 3.3V | 1发1收 | 1Mbps | 单通道高速 |
我个人习惯,3.3V系统首选MAX3232,5V系统用MAX232。如果你只需要一路串口,MAX3221能省点空间和成本。
三、串口DB9接口定义
DB9接口,做硬件的没人不认识。但你真的搞清楚每个引脚干嘛用的吗?
3.1 引脚定义
DB9分公头和母头。公头是带针的,母头是带孔的。电脑上的串口通常是公头,我们做的设备一般用母头。
| 引脚号 | 名称 | 方向 | 功能说明 |
|---|---|---|---|
| 1 | DCD | 输入 | 载波检测 |
| 2 | RXD | 输入 | 接收数据 |
| 3 | TXD | 输出 | 发送数据 |
| 4 | DTR | 输出 | 数据终端就绪 |
| 5 | GND | - | 信号地 |
| 6 | DSR | 输入 | 数据设备就绪 |
| 7 | RTS | 输出 | 请求发送 |
| 8 | CTS | 输入 | 清除发送 |
| 9 | RI | 输入 | 振铃指示 |
注意:很多应用只用2、3、5三根线就能通信。我曾经见过有人把所有引脚都接了,结果因为地环路导致通信异常。记住,简单就是可靠。
3.2 三线制接法
大多数嵌入式系统只需要三线制:
- Pin2(RXD)接对方TXD
- Pin3(TXD)接对方RXD
- Pin5(GND)接对方GND
注意,RXD和TXD要交叉连接。这个坑我踩过——第一次做串口线,直连了TXD到TXD,结果怎么都收不到数据。后来才反应过来,串口通信是交叉的。
3.3 硬件流控
如果数据量大,建议用硬件流控。RTS和CTS就是干这个的。RTS请求发送,CTS允许发送。我一般在高速通信(115200以上)才用流控,低速场景三线制足够了。
四、知识体系总览
下面这张图是我梳理的本章知识结构,帮你快速建立整体认知:
本章核心要点:
- RS232和TTL电平不能直连,必须用MAX232这类芯片转换
- MAX232的电容值要按数据手册来,别自作聪明
- DB9接口最常用的是2、3、5三根线,RXD和TXD要交叉
- 硬件流控(RTS/CTS)只在高速场景下有必要
好了,这一章的内容就这些。串口看似简单,但细节不少。我当年也是从烧芯片、调不通的坑里爬出来的。你把这些基础打牢了,后面学SerDes会轻松很多。