(一)很多時候當在使用串口的時候你會發現在read串口設備時會出現當機現象,出現這種現象的原因可能是你在open設備的時候沒有使用非阻塞的方式打開,在使用串口發送數據和接收數據的時候,或者注意select的配合使用達到非阻塞的讀取。
(二)在系統頭文件<termios.h>中定義了終端控制結構struct termios,tcgetattr()和tcsetattr()兩個系統函數獲得和設置這些屬性。結構struct termios中的域描述的主要屬性包括:
c_cflag : 控制選項
c_lflag : 線選項
c_iflag : 輸入選項
c_oflag :輸出選項
c_cc :控制字符
c_ispeed :輸入數據波特率
c_ospeed :輸出數據波特率
如果要設置某個選項,那麼就使用"|="運算,如果關閉某個選項就使用"&="和"~"運算。本文使用的各個選項的意義定義如下:
c_cflag: CLOCAL 本地模式,不改變端口的所有者
CREAD 表示使能數據接收器
PARENB 表示偶校驗
PARODD 表示奇校驗
CSTOPB 使用兩個停止位
CSIZE 對數據的bit使用掩碼
CS8 數據寬度是8bit
c_lflag: ICANON 使能規範輸入,否則使用原始數據(本文使用)
ECHO 回送(echo)輸入數據
ECHOE 回送擦除字符
ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信號
c_iflag: IXON 使能輸出軟件控制
IXOFF 使能輸入軟件控制
IXANY 允許任何字符再次開啓數據流
INLCR 把字符NL(0A)映射到CR(0D)
IGNCR 忽略字符CR(0D)
ICRNL 把CR(0D)映射成字符NR(0A)
c_oflag: OPOST 輸出後處理,如果不設置表示原始數據(本文使用原始數據)
c_cc[VMIN]: 最少可讀數據
c_cc[VTIME]: 等待數據時間(10秒的倍數)
如果以上的標誌沒有正確的屏蔽或設置,你的串口所收發的數據可能也不會正確,一定要注意這點
(三)由於串口設備經常在linux下使用,注意你要打開的終端設備名稱是否正確,"/dev/ttys0"注意不要省略根目錄符號,對於多串口通訊的芯片,注意打開的設備名稱對應。