linux串口收發(fā)數(shù)據(jù)不對(由于流控等設(shè)置不對導致)
最近一個項目使用了嵌入式linxu串口通信,由于通信使用的是2進制數(shù)據(jù),經(jīng)常出現(xiàn)通信校驗失敗,數(shù)據(jù)幀大小沒問題,就是校驗出錯
c_iflag參數(shù)表
鍵 值 說 明 IGNBRK 忽略BREAK鍵輸入 BRKINT 如果設(shè)置了IGNBRK,BREAK鍵輸入將被忽略 IGNPAR 忽略奇偶校驗錯誤 PARMRK 標識奇偶校驗錯誤 INPCK 允許輸入奇偶校驗 ISTRIP 去除字符的第8個比特 INLCR 將輸入的NL(換行)轉(zhuǎn)換成CR(回車) IGNCR 忽略輸入的回車 ICRNL 將輸入的回車轉(zhuǎn)化成換行(如果IGNCR未設(shè)置的情況下) IUCLC 將輸入的大寫字符轉(zhuǎn)換成小寫字符(非POSIX) IXON 允許輸出時對XON/XOFF流進行控制 IXANY 輸入任何字符將重啟停止的輸出 IXOFF 允許輸入時對XON/XOFF流進行控制 IMAXBEL 當輸入隊列滿的時候開始響鈴 c_oflag:輸出模式標志,控制終端輸出方式,具體參數(shù)如表2所示。 表2 c_oflag參數(shù) 鍵 值 說 明 OPOST 處理后輸出 OLCUC 將輸入的小寫字符轉(zhuǎn)換成大寫字符(非POSIX) ONLCR 將輸入的NL(換行)轉(zhuǎn)換成CR(回車)及NL(換行) OCRNL 將輸入的CR(回車)轉(zhuǎn)換成NL(換行) ONOCR 第一行不輸出回車符 ONLRET 不輸出回車符 OFILL 發(fā)送填充字符以延遲終端輸出 OFDEL 以ASCII碼的DEL作為填充字符,如果未設(shè)置該參數(shù),填充字符為NUL NLDLY 換行輸出延時,可以取NL0(不延遲)或NL1(延遲0.1s) CRDLY 回車延遲,取值范圍為:CR0、CR1、CR2和 CR3 TABDLY 水平制表符輸出延遲,取值范圍為:TAB0、TAB1、TAB2和TAB3 BSDLY 空格輸出延遲,可以取BS0或BS1 VTDLY 垂直制表符輸出延遲,可以取VT0或VT1 FFDLY 換頁延遲,可以取FF0或FF1 c_cflag:控制模式標志,指定終端硬件控制信息,具體參數(shù)如表3所示。 表3 c_cflag參數(shù) 鍵 值 說 明 CBAUD 波特率(4+1位)(非POSIX) CBAUDEX 附加波特率(1位)(非POSIX) CSIZE 字符長度,取值范圍為CS5、CS6、CS7或CS8 CSTOPB 設(shè)置兩個停止位 CREAD 使用接收器 PARENB 使用奇偶校驗 PARODD 對輸入使用奇偶校驗,對輸出使用偶校驗 HUPCL 關(guān)閉設(shè)備時掛起 CLOCAL 忽略調(diào)制解調(diào)器線路狀態(tài) CRTSCTS 使用RTS/CTS流控制 c_lflag:本地模式標志,控制終端編輯功能,具體參數(shù)如表4所示。 表4 c_lflag參數(shù) 鍵 值 說 明 ISIG 當輸入INTR、QUIT、SUSP或DSUSP時,產(chǎn)生相應(yīng)的信號 ICANON 使用標準輸入模式 XCASE 在ICANON和XCASE同時設(shè)置的情況下,終端只使用大寫。 ECHO 顯示輸入字符 ECHOE 如果ICANON同時設(shè)置,ERASE將刪除輸入的字符 ECHOK 如果ICANON同時設(shè)置,KILL將刪除當前行 ECHONL 如果ICANON同時設(shè)置,即使ECHO沒有設(shè)置依然顯示換行符 ECHOPRT 如果ECHO和ICANON同時設(shè)置,將刪除打印出的字符(非POSIX) TOSTOP 向后臺輸出發(fā)送SIGTTOU信號 c_cc[NCCS]:控制字符,用于保存終端驅(qū)動程序中的特殊字符,如輸入結(jié)束符等。c_cc中定義了如表5所示的控制字符。 表5 c_cc支持的控制字符 宏 說 明 宏 說 明 VINTR Interrupt字符 VEOL 附加的End-of-file字符 VQUIT Quit字符 VTIME 非規(guī)范模式讀取時的超時時間 VERASE Erase字符 VSTOP Stop字符 VKILL Kill字符 VSTART Start字符 VEOF End-of-file字符 VSUSP Suspend字符 VMIN 非規(guī)范模式讀取時的最小字符數(shù) ? ? tcsetattr函數(shù)用于設(shè)置終端的相關(guān)參數(shù)。參數(shù)fd為打開的終端文件描述符,參數(shù)optional_actions用于控制修改起作用的時間,而結(jié)構(gòu)體termios_p中保存了要修改的參數(shù)。 optional_actions可以取如下的值: TCSANOW:不等數(shù)據(jù)傳輸完畢就立即改變屬性。 TCSADRAIN:等待所有數(shù)據(jù)傳輸結(jié)束才改變屬性。 TCSAFLUSH:清空輸入輸出緩沖區(qū)才改變屬性。 錯誤信息: EBADF:非法的文件描述符。 EINTR:tcsetattr函數(shù)調(diào)用被信號中斷。 EINVAL:參數(shù)optional_actions使用了非法值,或參數(shù)termios中使用了非法值。 ENCTTY:非終端的文件描述符。