
为什么需要“流控”?
先举个日常场景:小区快递员(发送方)送快递,你(接收方)在家收快递。如果你正在忙(比如做饭),没法及时开门收件,快递员硬要把快递塞进去,很可能导致快递丢失;但如果居你能提前告诉快递员“现在能收”或“等下再来”,就能避免这种问题。
UART通信里的“流控”,主要就是解决这个问题:发送方和接收方的处理速度可能不匹配(比如发送方是高速 SoC,接收方是低速传感器),如果发送方一股劲拼命发数据,接收方缓冲区满了处理不过来,多余的数据就会丢失。流控的作用,就是让收发双方“互相沟通”,协调传输节奏。
流控分两种:软件流控(靠特殊字符XON/XOFF)和硬件流控(靠专用引脚RTS/CTS)。今天重点聊更可靠、更常用的——RTS/CTS硬件流控。
RTS和CTS 是两个“通信信号兵”
UART基础通信只需要TX(发送线)、RX(接收线)、GND(地线)三根线,而RTS/CTS硬件流控需要额外增加两根专用引脚,这两根线就像两个“信号兵”,专门负责传递“能不能发数据”的指令。

RTS(Request To Send)——请求发送:由“接收方”控制,发给“发送方”的信号,意思是“我(接收方)准备好了,你可以发数据了”(或“我忙,别发了”); 注意:很多人会搞反控制方,记住“RTS是接收方发的请求”,不是发送方!
CTS(Clear To Send)——允许发送:由“发送方”控制,发给“接收方”的信号?不!错了!再记一遍:CTS是“对RTS的响应”,通常和RTS交叉连接——接收方通过RTS发请求,发送方看到后,通过CTS回应“我收到你的请求了,马上发/停止发”;更简单的记法:RTS=接收方的“就绪信号”,CTS=发送方的“应答信号”,两根线交叉连接(A的RTS接B的CTS,A的CTS接B的RTS)。
补充:硬件上,RTS和CTS都是“低电平有效”(大部分场景)——比如接收方拉低RTS,就表示“我就绪了”;发送方拉低CTS,就表示“我收到指令,准备发/已停止”。
总结
RTS/CTS硬件流控的一句话概括:接收方靠RTS发“就绪/暂停”信号,发送方靠CTS响应,从硬件层面协调传输节奏,避免数据丢失。它不需要占用数据带宽,可靠性高,是高速、大数据量UART通信的“必备技能”。
你在使用UART流控时,有没有遇到过接线接反、配置无效这类坑?欢迎评论区留言交流分享~
(完)
本人专注 Linux 驱动 & Linux/Android BSP 开发调试,可接外包项目/技术支持/问题定位。有需求或交个朋友可加微信:【Chen_WeChat2026】。
-
嵌入式
+关注
关注
5208文章
20610浏览量
336555 -
uart
+关注
关注
22文章
1319浏览量
106933
发布评论请先 登录
2025嵌入式开发教程|远航哥
什么是嵌入式应用开发?
Renesas Starter Kit for RX72T:开启嵌入式开发新征程
探索 RENESAS EK - RX261 v1 评估套件:开启嵌入式系统设计新旅程
什么是嵌入式操作系统?
嵌入式需要掌握哪些核心技能?
入行嵌入式应该怎么准备?
CYW20704 的 UART 4 针(TX/RX/CTS/RTS)是什么形式(推拉或漏极开路)吗?
Tx-Rx iPAC FEM 双频 GSM/GPRS skyworksinc
用于双频 GSM / GPRS / EDGE 的 Tx-Rx 前端模块 skyworksinc
Tx–Rx iPAC™ 前端模块 – 四频 GSM/GPRS skyworksinc
用于双频 GSM / GPRS 的 Tx-Rx iPAC™ 前端模块 skyworksinc
飞凌嵌入式2025嵌入式及边缘AI技术论坛圆满结束
嵌入式分享#60:UART 我只会 TX、RX
评论