串口簡介
串行口是計算機一種常用的接口,具有連接線少,通訊簡單,得到廣泛的使用。常用的串口是 RS-232-C 接口(又稱 EIA RS-232-C)它是在 1970 年由美國電子工業協會(EIA)聯合貝爾系統、 調制解調器廠家及計算機終端生產廠家共同制定的用於串行通訊的標準。它的全名是”數據終端設備(DTE)和數據通訊設備(DCE)之間串行二進制數據交換接口技術標準”該標準規定採用一個 25 個腳的 DB25 連接器,對連接器的每個引腳的信號內容加以規定,還對各種信號的電平加以規定。
Linux 操作系統從一開始就對串行口提供了很好的支持,本文簡單介紹以下linux下串口調試方法以及如何用shell編程讀取串口數據。
串口位置信息
在Linux下,串口的名稱一般都爲/dev/tty* ,接上串口線之後,我們可以使用:
dmesg | grep tty*
來查找對應的串口,這裏使用的是ttyUSB0和ttyUSB1來做測試。
串口調試工具
Linux下提供了一個小巧的串口調試工具,叫做Minicom,可以直接通過sudo apt-get install minicom來進行安裝。
安裝之後界面如下:
按crtl_A Z可以進行參數設置,包括波特率,校驗方式,流控狀態等。軟件可以通過-D指令直接打開對應串口:sudo minicom -D /tty0
串口與Shell編程
在這之前先介紹一下stty,stty(set tty)命令用於檢查和修改當前註冊的終端的通信參數。
stty -a 查看當前註冊端口的設置情況:
stty -ixon將流控制設置爲OFF,而命令
stty ixon則將流控其置爲ON。
在stty命令中可以同時設置多個選項:stty ixon 1200
設置波特率爲1200 並且設置流控爲on
具體更多的參數設置可以使用man指令查看。
下面說下如何通過shell來實現數據的讀取,這裏主要是使用的cat指令:
cat /dev/ttyUSB0
但在如果執行上面命令,程序會一直停止在讀取的界面,如果我們的要求是想讀取一段一段的數據,即分批次讀取一定之間內的數據,保存並處理,那應該怎麼辦呢?我們就需要先用stty將模式設置成raw 並且設置最大連接時間:
stty -F /dev/ttyUSB0 raw speed 9600 min 0 time 10
然後我們可以把每次讀取到的數據存儲到一個臨時文件中,然後對其進行處理:
cat /dev/ttyUSB0 >> “tmpFile”
完成的代碼如下:
stty -F /dev/ttyUSB0 raw speed 9600 min 0 time 10 while [ 1 -eq 1 ] do cat /dev/ttyUSB0 >> "tmpFile" do something done