
為什么需要“流控”?
先舉個日常場景:小區快遞員(發送方)送快遞,你(接收方)在家收快遞。如果你正在忙(比如做飯),沒法及時開門收件,快遞員硬要把快遞塞進去,很可能導致快遞丟失;但如果居你能提前告訴快遞員“現在能收”或“等下再來”,就能避免這種問題。
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文章
20599瀏覽量
336423 -
uart
+關注
關注
22文章
1319瀏覽量
106921
發布評論請先 登錄
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
評論