一、什么是 UART?
UART(Universal Asynchronous Receiver/Transmitter) 是一种 串行通信协议,它的特点是通信时不需要专门的时钟信号(叫做“异步”通信),常用于两个设备之间的简单数据通信,比如:
-
单片机 <-------------> 传感器
-
开发板 <-------------> 电脑
-
蓝牙模块 <-------------> MCU
二、UART 的核心硬件信号线有哪些?
信号线 | 全称 | 作用 |
---|---|---|
TX | Transmit(发送) | 把自己数据“发出去” |
RX | Receive(接收) | 接收对方发来的数据 |
RTS | Request To Send(请求发送)(输出端) | 告诉对方:“我准备好接收了,你可以发!” |
CTS | Clear To Send(可以发送)(输入端) | 对方回应:“我准备好了,你可以发!” |
三、用对话打比方来理解这些信号:
假设你和朋友用对讲机聊天,你就是设备A,你朋友是设备B。
最基本的两条线:TX 和 RX
-
你说话 = TX
-
你听对方说话 = RX
所以,A 的 TX 要连到 B 的 RX,B 的 TX 要连到 A 的 RX(交叉连接):
A: TX -----> RX :B
A: RX <----- TX :B
加上礼貌对话:RTS 和 CTS
当两个人说话都很快、信息很多的时候,就可能“说太多听不过来”,这时候就需要**“打招呼”和“确认”机制**,也就是 RTS/CTS。
A 想发数据给 B 的流程:
-
A 拉低 RTS(Request To Send) => 告诉 B:“我准备发数据了,可以吗?”
-
B 检查自己的情况,发现自己可以接收,于是拉低自己的RTS, 也就是对应A的 CTS(Clear To Send)=> 回复 A:“可以,你发吧!”
-
A 开始通过 TX 发数据,B 用 RX 收
这个过程就叫做 硬件流控(Hardware Flow Control),防止数据丢失或对方来不及接收。
四、总结图示:
五、实际应用场景举例
-
简单场合(比如开发板 <—> 串口调试工具)
-
通常只用 TX、RX、GND 三根线。
-
比如你用 USB-TTL 模块和串口调试助手通信。
-
-
可靠传输(比如 GSM 模块、蓝牙模块等)
- 会用到 RTS/CTS,防止串口缓存溢出,数据丢失。
-
带流控的通信
- 比如你和一个大容量数据设备通信(像 GPS、WIFI 模块等),建议打开 RTS/CTS 硬件流控.
六、额外一根线:GND(地线)
千万别忘了,通信的两个设备必须共地! 否则收发信号没有参考电平,可能根本收不到数据。