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硬件接口的核心要素串起来了,你可以对照着理解:

UART硬件接口知识结构图 UART硬件接口 TX / RX 引脚 TTL电平标准 RS232电平转换 DB9接口定义 交叉连接 空闲高电平 0V~0.8V / 2V~5V 3.3V / 5V兼容 ±3V ~ ±15V MAX232转换 2收3发5地 核心要点 • TX/RX必须交叉连接,空闲时保持高电平 • TTL电平与RS232电平不兼容,需要转换芯片 • DB9接口三线制通信只用2、3、5脚 • 电平不匹配是UART通信失败的常见原因

3.6 实战中的电平匹配问题

说了这么多理论,咱们来点实际的。你在做项目时,最常遇到的就是电平匹配问题。我总结了几种常见场景:

  • MCU之间通信:同电压等级(都是3.3V或都是5V)可以直接连。不同电压等级需要加电平转换,比如用TXS0108E这样的双向电平转换芯片。
  • MCU与PC通信:必须加USB转串口模块(如CH340、CP2102)或RS232转换芯片。直接连会烧端口。
  • MCU与工业设备通信:工业设备通常是RS232或RS485电平,需要对应的转换电路。

重要提醒:千万不要用“电阻分压”的方式做电平转换!虽然理论上可行,但信号质量会变差,波特率一高就丢数据。我吃过这个亏,后来老老实实用了电平转换芯片。