3、UART硬件接口:TX/RX引脚、RS232电平转换、TTL电平标准、DB9接口定义
做嵌入式开发,打交道最多的就是UART。别看它协议简单,硬件接口这块要是搞不清楚,板子调不通的时候你连问题出在哪都不知道。今天咱们就把UART的硬件接口掰开揉碎了讲清楚。
3.1 TX与RX引脚:数据流动的“双向车道”
UART通信最少只需要两根线——TX(发送)和RX(接收)。说白了,就是一条车道去,一条车道回。设备A的TX连设备B的RX,设备A的RX连设备B的TX,这叫“交叉连接”。
核心原则:发送端TX接接收端RX,接收端RX接发送端TX。千万别接反了,我见过有人把TX接TX、RX接RX,结果调了一整天没反应。
这里有个容易忽略的点:空闲时TX引脚应该是高电平。为什么?因为UART协议里,起始位是低电平,停止位是高电平。如果空闲时TX是低电平,接收端会误以为一直在接收数据。我在项目中遇到过这种情况——某个模块的TX引脚默认被拉低了,结果一上电就疯狂进中断,查了半天才发现是硬件设计的问题。
3.2 TTL电平标准:芯片内部的“语言”
咱们MCU的UART引脚,默认输出的是TTL电平。TTL电平的标准很简单:
| 逻辑电平 | 电压范围 | 典型值 |
|---|---|---|
| 逻辑0(低电平) | 0V ~ 0.8V | 0V |
| 逻辑1(高电平) | 2.0V ~ 5.0V | 3.3V 或 5V |
嗯,这里要注意:不同MCU的TTL电平可能不一样。3.3V的芯片和5V的芯片直接连,轻则通信异常,重则烧毁引脚。我建议你在设计电路时,先确认两边的电平是否兼容。如果不兼容,加个电平转换芯片,别省这个钱。
个人经验:STM32的UART引脚是3.3V容忍的,但有些老款51单片机是5V的。我曾经直接把STM32的TX接到51的RX上,结果51那边死活收不到数据。后来加了电平转换,问题就解决了。
3.3 RS232电平转换:让信号“跑得更远”
TTL电平有个缺点——抗干扰能力差。你想想看,3.3V的信号在线上跑个一两米,噪声一叠加,接收端就分不清0和1了。所以工业上常用RS232标准。
RS232的电平和TTL完全相反:
| 逻辑电平 | RS232电压范围 | TTL对应关系 |
|---|---|---|
| 逻辑0 | +3V ~ +15V | TTL高电平 |
| 逻辑1 | -3V ~ -15V | TTL低电平 |
你没看错,RS232的逻辑0是正电压,逻辑1是负电压。这就是为什么需要电平转换芯片,比如经典的MAX232。它的作用就是把TTL的0~3.3V转换成RS232的±12V。
避坑指南:我曾经直接把TTL电平的UART接到电脑的DB9串口上,结果电脑那边没反应,还差点烧了主板。记住:电脑串口是RS232电平,不是TTL电平!必须加MAX232之类的转换芯片。
3.4 DB9接口定义:老伙计的“针脚密码”
DB9是串口最常见的物理接口。虽然现在很多电脑都不带DB9了,但工业设备上依然随处可见。DB9有公头和母头之分,咱们通常用的是母头(孔)接设备,公头(针)接线缆。
DB9的引脚定义如下:
| 引脚号 | 信号名称 | 方向 | 说明 |
|---|---|---|---|
| 1 | DCD | 输入 | 载波检测 |
| 2 | RXD | 输入 | 接收数据 |
| 3 | TXD | 输出 | 发送数据 |
| 4 | DTR | 输出 | 数据终端就绪 |
| 5 | GND | - | 信号地 |
| 6 | DSR | 输入 | 数据设备就绪 |
| 7 | RTS | 输出 | 请求发送 |
| 8 | CTS | 输入 | 清除发送 |
| 9 | RI | 输入 | 振铃指示 |
实际做三线制通信时,只用2(RXD)、3(TXD)、5(GND)就够了。其他引脚是用于硬件流控的,咱们后面讲驱动的时候再细说。
小技巧:如果你自己焊DB9接头,记住一个口诀:“2收3发5地”。2脚是接收,3脚是发送,5脚是地。这样就不会焊错了。
3.5 知识结构图:UART硬件接口全景
下面这张图把UART硬件接口的核心要素串起来了,你可以对照着理解:
3.6 实战中的电平匹配问题
说了这么多理论,咱们来点实际的。你在做项目时,最常遇到的就是电平匹配问题。我总结了几种常见场景:
- MCU之间通信:同电压等级(都是3.3V或都是5V)可以直接连。不同电压等级需要加电平转换,比如用TXS0108E这样的双向电平转换芯片。
- MCU与PC通信:必须加USB转串口模块(如CH340、CP2102)或RS232转换芯片。直接连会烧端口。
- MCU与工业设备通信:工业设备通常是RS232或RS485电平,需要对应的转换电路。
重要提醒:千万不要用“电阻分压”的方式做电平转换!虽然理论上可行,但信号质量会变差,波特率一高就丢数据。我吃过这个亏,后来老老实实用了电平转换芯片。