導(dǎo)讀
在串口通信開發(fā)中,數(shù)據(jù)錯(cuò)亂是常見問題。本文將快速介紹串口標(biāo)志位的作用及配置方法,幫助解決數(shù)據(jù)傳輸錯(cuò)誤。
有用戶反饋“串口應(yīng)用層數(shù)據(jù)錯(cuò)亂、與發(fā)送端發(fā)送的字節(jié)數(shù)不匹配”,簡(jiǎn)單來說就是接收和發(fā)送的數(shù)據(jù)不對(duì),而且還存在幀數(shù)據(jù)錯(cuò)亂的情況。經(jīng)排查,是程序沒用設(shè)置ISIG標(biāo)志位設(shè)置引起的。本節(jié)以此為切入點(diǎn)進(jìn)行展開,對(duì)串口設(shè)置的一些標(biāo)志位進(jìn)行簡(jiǎn)單說明。
1. c_cflag:可以設(shè)置波特率、字符大小、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位和硬軟流控等
1.1 波特率
![4aba9ac6-e829-11ef-9434-92fbcf53809c.png](http://images.elecfans.net/uploads/20250211/4aba9ac6-e829-11ef-9434-92fbcf53809c.png)
1.2 其它
![4ad2ece8-e829-11ef-9434-92fbcf53809c.png](http://images.elecfans.net/uploads/20250211/4ad2ece8-e829-11ef-9434-92fbcf53809c.png)
初始化c_flag時(shí),不能直接對(duì) c_cflag 成員進(jìn)行賦值,而是需要通過“與”、“或”操作使用其中的某些選項(xiàng),例如:
- 設(shè)置硬件流控制
c_cflag |= CNEW_RTSCTS
無硬件流控制
c_cflag &= ~CNEW_RTSCTS
2. c_iflag:用于控制端口接收端的字符輸入處理
![4ae9ddb8-e829-11ef-9434-92fbcf53809c.png](http://images.elecfans.net/uploads/20250211/4ae9ddb8-e829-11ef-9434-92fbcf53809c.png)
禁用軟件流控制是禁止上面的選項(xiàng)。
c_iflag &= ~(IXON | IXOFF | IXANY);
3. c_oflag:用于控制終端端口發(fā)送出去的字符處理
因?yàn)楝F(xiàn)在終端的速度比以前快得多,所以大部分延時(shí)掩碼幾乎沒什么用途。
啟用輸出處理需要在 c_oflag 成員中啟用 OPOST 選項(xiàng)。
c_oflag |= OPOST;
使用原始輸出,就是禁用輸出處理,使數(shù)據(jù)能不經(jīng)過處理過濾的完整地輸出到串口。當(dāng) OPOST 被禁止,c_oflag 其它選項(xiàng)也被忽略。
c_oflag &= ~OPOST;
4. c_lflag:用于控制控制終端的本地?cái)?shù)據(jù)處理和工作模式
4.1 選擇規(guī)范模式
c_lflag |= (ICANON | ECHO | ECHOE);
4.2 選擇原始模式
c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
5. c_cc:定義特殊控制特性
-
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
1961瀏覽量
64866 -
串口通信
+關(guān)注
關(guān)注
34文章
1628瀏覽量
55756 -
串口數(shù)據(jù)
+關(guān)注
關(guān)注
0文章
34瀏覽量
13928
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM8使用串口接收中斷時(shí)用不用清標(biāo)志位?
有關(guān)STM32串口收發(fā)標(biāo)志位的問題
怎么在標(biāo)志寄存器中設(shè)置讀取位?
用中斷接收串口數(shù)據(jù)為什么會(huì)存在串口接收數(shù)據(jù)錯(cuò)亂的問題呢
STM32串口TXE和TC標(biāo)志位的相關(guān)資料推薦
上位機(jī)如何設(shè)置串口9位數(shù)據(jù)位/TB8
單片機(jī)硬件定時(shí)器5ms會(huì)導(dǎo)致串口接收錯(cuò)亂嗎
單片機(jī)復(fù)位標(biāo)志位的設(shè)置與應(yīng)用研究
問題筆記:STM32串口數(shù)據(jù)位與校驗(yàn)位
![問題筆記:STM32<b class='flag-5'>串口</b><b class='flag-5'>數(shù)據(jù)位</b>與校驗(yàn)<b class='flag-5'>位</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 串口TXE和TC標(biāo)志位的理解
![STM32 <b class='flag-5'>串口</b>TXE和TC<b class='flag-5'>標(biāo)志</b><b class='flag-5'>位</b>的理解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
多機(jī)通訊設(shè)置TB8
![多機(jī)通訊<b class='flag-5'>設(shè)置</b>TB8](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
stm32串口接收中斷觸發(fā)原理
![stm32<b class='flag-5'>串口</b>接收中斷觸發(fā)原理](https://file1.elecfans.com/web2/M00/BD/E4/wKgaomWnhQ2AGX5KAABtqpoTjxI636.png)
評(píng)論