在Linux系統下調試串口(如RS232/485)時,新手常面臨兩類典型問題:發送數據出現亂碼、終端回顯干擾接收結果。實際上,僅需通過系統自帶的stty指令完成基礎配置,配合雙終端測試,即可快速實現穩定的串口通信。本文基于通用操作場景,總結一套“即學即用”的串口設置與測試方案。
一、核心痛點解析:為何需配置串口參數?
直接使用echo發送數據、cat接收數據前,串口默認配置存在三類影響通信的問題:
1.亂碼問題:默認啟用的onlcr模式會將“換行符(n)”自動轉換為“回車+換行(rn)”,若對接設備不兼容該格式,接收端會出現亂碼;
2.回顯干擾:默認echo模式會重復顯示輸入字符(如發送“123”時,終端會額外回顯“123”),導致接收端獲取的數據混入冗余內容;
3.緩沖延遲:默認icanon規范模式下,數據需等待“回車”指令才會發送,實時性較差,測試過程中無法即時查看傳輸結果。
針對上述問題,核心配置指令(如stty -F /dev/ttyS0 -echo -onlcr、stty -F /dev/ttyS0 -echo -icanon)可實現精準解決。

二、Linux串口操作3步方案(含指令解析)
第一步:確認串口設備,避免操作錯誤
首先通過ls命令查看系統中已識別的串口設備(常見路徑為/dev/ttyS*或/dev/ttyUSB*,前者為硬件串口,后者為USB轉串口設備),示例如下:
|
#列出系統中所有ttyS類串口設備,確認目標串口存在
ls -l /dev/ttyS*
|
示例輸出(確認/dev/ttyS0串口存在):
|
crw-rw---- 1 root dialout 4, 64 2025-09-01 10:00 /dev/ttyS0
|
注意:若執行命令時提示“Permission denied”,后續所有操作需添加sudo權限,或切換至root用戶(通過su -指令)。
第二步:用stty配置串口,解決亂碼與回顯
基于/dev/ttyS0串口,針對不同通信需求,分兩類場景進行配置,覆蓋多數測試場景:
場景1:通用測試(解決亂碼+關閉回顯)
適用于多數串口通信場景,通過關閉回顯和換行轉換,避免基礎通信問題:
|
#核心指令:配置/dev/ttyS0,關閉回顯(-echo)、關閉換行符轉換(-onlcr)
stty -F /dev/ttyS0 -echo -onlcr
|
指令解析:
?stty:Linux系統自帶的串口參數配置工具;
?-F /dev/ttyS0:指定待配置的串口設備路徑(-F為“File”縮寫,用于明確操作對象);
?-echo:關閉“輸入回顯”功能——發送數據時,終端不再重復顯示發送內容,避免干擾接收端數據讀取;
?-onlcr:關閉“輸出換行轉回車”功能(onlcr全稱“Output NewLine to Carriage Return”)——禁用后,換行符(n)將直接發送,不額外轉換為“回車+換行”,解決格式不兼容導致的亂碼。
場景2:實時傳輸測試(低延遲+關閉回顯)
針對傳感器數據采集、實時指令下發等對傳輸延遲要求較高的場景,需額外關閉icanon規范模式,啟用“原始模式”:
|
#進階指令:配置/dev/ttyS0,關閉回顯(-echo)、關閉規范模式(-icanon)
stty -F /dev/ttyS0 -echo -icanon
|
關鍵補充:
?-icanon:關閉規范模式,進入“原始模式”——數據無需等待“回車”指令,發送后立即傳輸,實時性顯著提升,測試中可即時觀察接收結果;
?若需固定波特率(如9600、115200),可在指令末尾追加波特率參數,示例:stty -F /dev/ttyS0 -echo -icanon 9600(串口波特率需與對接設備保持一致,否則會出現亂碼)。
驗證配置有效性
配置完成后,通過stty指令查看/dev/ttyS0當前參數,確認目標配置已生效:
|
#查看/dev/ttyS0的當前配置,重點確認-echo、-onlcr、-icanon是否存在
stty -F /dev/ttyS0
|
正確輸出特征:參數列表中顯示-echo(回顯關閉)、-onlcr(換行轉換關閉)、-icanon(規范模式關閉,若配置該參數),無echo、onlcr、icanon原始參數。
第三步:雙終端實戰測試,驗證通信穩定性
配置完成后,打開兩個終端,分別執行“接收”和“發送”操作,驗證/dev/ttyS0串口通信是否正常:
終端1:接收端(監聽串口數據)
將/dev/ttyS0設為接收端,通過cat指令持續讀取串口數據:
|
#終端1執行:持續接收/dev/ttyS0串口的數據
cat /dev/ttyS0
|
提示:cat指令會保持阻塞狀態以等待數據,需終止時按Ctrl+C即可。
終端2:發送端(發送測試數據)
在另一個終端中,向/dev/ttyS0串口發送測試數據(如“test_data”):
|
#終端2執行:向/dev/ttyS0串口發送“test_data”(-n選項避免自動追加換行符)
echo -n "test_data" > /dev/ttyS0
|
預期結果:終端1會即時顯示“test_data”,無亂碼、無冗余回顯內容,表明串口配置正確且通信正常。
進階:回環測試(無外部設備時自測)
若暫無對接設備,可通過“回環測試”驗證串口自身功能是否正常:
1.用導線短接/dev/ttyS0對應的TX引腳(發送引腳)與RX引腳(接收引腳)(需參考硬件手冊確認引腳定義,如部分設備中/dev/ttyS0的TX為PIN10、RX為PIN9);
2.終端1執行:cat /dev/ttyS0(持續接收數據);
3.終端2執行:echo -n "loop_test" > /dev/ttyS0(發送測試數據);
4.若終端1成功接收“loop_test”,說明/dev/ttyS0串口硬件功能正常。
三、常見問題解決方案(新手必看)
1.問題1:執行指令提示“Permission denied”
?原因:當前用戶無/dev/ttyS0串口的讀寫權限;
?解決方案:通過chmod指令臨時賦予全用戶讀寫權限,示例:
|
sudo chmod 666 /dev/ttyS0
|
1.問題2:配置后仍出現亂碼
?原因:串口波特率、數據位、校驗位與對接設備不匹配(如本地配置為9600波特率,對接設備為115200波特率);
?解決方案:統一雙方參數,以9600波特率為例,配置指令:
|
stty -F /dev/ttyS0 -echo -onlcr 9600
|
1.問題3:指令無報錯,但接收端無數據
?原因1:物理連接異常(如TX/RX引腳接反、未共地);
?原因2:SELinux攔截(CentOS、RHEL等系統默認啟用SELinux,可能限制串口操作);
?解決方案:檢查物理接線是否正確;臨時關閉SELinux(僅用于測試),指令:
|
sudo setenforce 0
|
1.問題4:發送數據后,接收端延遲較長才顯示
?原因:未關閉icanon規范模式,數據滯留在緩沖區,需等待“回車”觸發發送;
?解決方案:添加-icanon參數配置串口,指令:
|
stty -F /dev/ttyS0 -echo -onlcr -icanon
|
四、方案優勢總結
1.簡潔高效:無需安裝第三方工具(如minicom),僅依賴系統自帶的stty、echo、cat指令,新手可在5分鐘內掌握基礎操作;
2.精準避坑:通過-echo解決回顯干擾、-onlcr解決亂碼、-icanon解決實時性問題,三個核心參數覆蓋90%以上的串口測試場景;
3.通用性強:適用于硬件串口(/dev/ttyS*)與USB轉串口(/dev/ttyUSB*),僅需替換串口路徑即可復用操作流程。
若在串口調試過程中遇到其他問題,可通過查看系統日志(dmesg | grep ttyS0)進一步定位故障,或參考硬件手冊確認串口引腳與參數配置。
-
Linux
+關注
關注
88文章
11779瀏覽量
219218 -
干擾
+關注
關注
0文章
216瀏覽量
28245 -
串口
+關注
關注
15文章
1623瀏覽量
83008
發布評論請先 登錄
怎樣處理串口的回調函數?
串口接收數據亂碼的問題如何解決
調試串口的時候,終端回顯錯誤如何處理?
STM32串口通信數據亂碼的相關問題
單片機串口通信亂碼問題
STC51和STM32使用串口輸出中文亂碼問題解決
STM32串口通信亂碼解決方法
Linux串口操作指南:3步搞定設置,告別亂碼與回顯干擾
評論