3. UART 硬件引脚与连接:TX、RX、GND、RTS、CTS、DTR、DSR 等引脚功能详解,交叉连接与直连方式
UART 通信的物理层由一组硬件引脚构成。在调试驱动开发中,正确理解每个引脚的功能、电平特性以及设备间的连接方式,是确保数据稳定传输的前提。本节将逐一解析标准 RS-232 及常见 TTL UART 引脚,并对比交叉连接与直连方式的适用场景。
3.1 核心数据与地线:TX、RX、GND
这三条引脚是任何 UART 通信的基础,缺一不可。
| 引脚 | 全称 | 方向(以 DTE 为例) | 功能描述 |
|---|---|---|---|
| TX | Transmit Data | 输出 | 发送串行数据。空闲时为高电平(TTL 逻辑 1,RS-232 为负电压)。 |
| RX | Receive Data | 输入 | 接收串行数据。必须与对端设备的 TX 相连。 |
| GND | Ground | 公共参考 | 信号地,为 TX/RX 提供电压参考点。所有设备必须共地。 |
⚠️ 驱动开发避坑: 在调试早期,很多工程师只连接 TX/RX 而忽略 GND,导致数据帧错乱或完全无响应。GND 是电平参考的基准,不共地时,接收端可能无法正确识别逻辑电平,尤其在长线传输或噪声环境中。
3.2 硬件流控引脚:RTS 与 CTS
硬件流控用于防止接收端数据溢出。当接收缓冲区满时,接收端通过拉低 RTS 通知发送端暂停发送。
| 引脚 | 全称 | 方向(以 DTE 为例) | 功能描述 |
|---|---|---|---|
| RTS | Request to Send | 输出 | DTE 请求发送数据。当 DTE 准备好接收时,置为有效(通常低电平)。 |
| CTS | Clear to Send | 输入 | DCE 允许发送。当 DCE 缓冲区有空闲时,置为有效;否则拉高暂停发送。 |
🔧 流控逻辑: 在驱动中,发送数据前必须先检查 CTS 引脚状态。若 CTS 无效,驱动应暂停发送并启动超时重传机制。接收端则通过控制 RTS 引脚的电平来调节数据流。
3.3 调制解调器控制引脚:DTR 与 DSR
DTR 和 DSR 主要用于设备握手,表示设备是否上电并处于工作状态。在嵌入式调试中,它们常被用于触发目标板的复位或引导模式选择。
| 引脚 | 全称 | 方向(以 DTE 为例) | 功能描述 |
|---|---|---|---|
| DTR | Data Terminal Ready | 输出 | DTE 就绪。通常表示主机端已启动并准备通信。 |
| DSR | Data Set Ready | 输入 | DCE 就绪。表示外设(如调制解调器或目标板)已上电并初始化完成。 |
💡 调试技巧: 在嵌入式 bootloader 中,常利用 DTR 信号控制目标板的复位引脚。主机通过拉低 DTR 使目标板复位,然后快速发送特定字符(如 'g')进入下载模式。这是很多调试器(如 OpenOCD、ST-Link)的底层原理。
3.4 交叉连接与直连方式
UART 设备间的连接方式取决于设备类型:DTE(数据终端设备,如 PC、开发板)与 DCE(数据通信设备,如调制解调器、某些外设模块)。
3.4.1 交叉连接(Null Modem)
适用于 DTE 到 DTE 的直接通信(如 PC 与开发板)。TX 与 RX 交叉,RTS 与 CTS 交叉,GND 直连。
PC (DTE) 开发板 (DTE)
TX ———————————————— RX
RX ———————————————— TX
GND —————————————————— GND
RTS ———————————————— CTS
CTS ———————————————— RTS
DTR ———————————————— DSR
DSR ———————————————— DTR
3.4.2 直连连接(Straight Through)
适用于 DTE 到 DCE 的连接(如 PC 与 RS-232 调制解调器)。同名引脚直接相连。
PC (DTE) 调制解调器 (DCE)
TX ———————————————— TX
RX ———————————————— RX
GND —————————————————— GND
RTS ———————————————— RTS
CTS ———————————————— CTS
DTR ———————————————— DTR
DSR ———————————————— DSR
🔍 驱动开发要点: 在编写驱动时,必须通过设备树或板级配置文件明确当前连接方式。错误的连接方式会导致流控失效、数据丢失甚至硬件损坏。建议在驱动初始化阶段增加引脚电平自检逻辑。
3.5 引脚连接拓扑图
下图展示了典型的 DTE-DTE 交叉连接拓扑,包含数据线、流控线和握手线。
3.6 引脚功能对比总结
| 引脚 | 类别 | TTL 电平有效 | RS-232 电平有效 | 驱动开发关注点 |
|---|---|---|---|---|
| TX | 数据 | 高=1,低=0 | -3V~-15V=1,+3V~+15V=0 | 发送缓冲区管理,波特率精度 |
| RX | 数据 | 高=1,低=0 | -3V~-15V=1,+3V~+15V=0 | 接收中断处理,FIFO 阈值 |
| GND | 电源 | 0V | 0V | 必须连接,否则通信失败 |
| RTS | 流控 | 低=请求发送 | 正电压=请求发送 | 输出控制,接收缓冲区水位 |
| CTS | 流控 | 低=允许发送 | 正电压=允许发送 | 输入检测,发送暂停逻辑 |
| DTR | 握手 | 低=就绪 | 正电压=就绪 | 设备复位/引导模式控制 |
| DSR | 握手 | 低=就绪 | 正电压=就绪 | 外设状态检测 |
📌 电平转换提醒: 嵌入式开发板通常使用 TTL 电平(0~3.3V 或 0~5V),而 PC 串口多为 RS-232 电平(±12V)。直接连接会烧毁引脚。必须使用 MAX232 或类似电平转换芯片。在驱动中,电平转换芯片的状态通常不需要软件干预,但需确保供电正常。