那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么你的串口總是丟一些特殊字符?

ZLG致遠(yuǎn)電子 ? 2025-02-06 13:26 ? 次閱讀

導(dǎo)讀

嵌入式開發(fā)物聯(lián)網(wǎng)應(yīng)用中,Linux系統(tǒng)的串口通信至關(guān)重要。本文將簡單介紹Linux下串口設(shè)備的命名規(guī)則和termios結(jié)構(gòu)體,并解析終端的三種工作模式,幫助開發(fā)者更好地掌握Linux串口編程

Linux下串口設(shè)備名稱一般為"/dev/ttySn",n是數(shù)字,若串口是 USB 擴(kuò)展的,則串口設(shè)備文件命名多為/dev/ttyUSBn。串口是一個(gè)終端設(shè)備,在Linux中用 termios結(jié)構(gòu)體來描述:

struct termios { tcflag_t c_cflag; /* 控制標(biāo)志 */ tcflag_t c_iflag; /* 輸入標(biāo)志 */ tcflag_t c_oflag; /* 輸出標(biāo)志 */ tcflag_t c_lflag; /* 本地標(biāo)志 */ tcflag_t c_cc[NCCS]; /* 控制字符 */ };

termios是在POSIX規(guī)范中定義的標(biāo)準(zhǔn)接口,表示終端設(shè)備(包括虛擬終端,串口等)。終端有 3 種工作模式,分別為規(guī)范模式(canonical mode)、非規(guī)范模式(non-canonical mode)和原始模式(raw mode)。

c_lflag 中設(shè)置 ICANNON 標(biāo)志來定義終端的三種模式:規(guī)范模式、非規(guī)范模式和原始模式。

1. 規(guī)范模式

規(guī)范模式下所有的輸入都是基于行進(jìn)行處理的。在用戶輸入一個(gè)行結(jié)束符(回車符、EOF等)之前,系統(tǒng)調(diào)用read()函數(shù)讀不到用戶輸入的任何字符。除了EOF之外的行結(jié)束符(回車符等)和普通字符一樣都會(huì)被read()函數(shù)讀取到緩沖區(qū)之中。在規(guī)范模式中,行編輯是可行的,而且一次調(diào)用read()函數(shù)最多只能讀取一行數(shù)據(jù)。

2. 非規(guī)范模式

非規(guī)范模式所有的輸入是即時(shí)有效的,不需要用戶另外輸入行結(jié)束符,而且不可進(jìn)行行編輯。在非規(guī)范模式下,對(duì)參數(shù) MIN(c_cc[VMIN])和 TIME(c_cc[VTIME])的設(shè)置決定read()函數(shù)的調(diào)用方式。設(shè)置可以有 4 種不同的情況。

  • VMIN=0和VTIME=0:read()函數(shù)立即返回。若有可讀數(shù)據(jù),則讀取數(shù)據(jù)并返回被讀取的字節(jié)數(shù),否則讀取失敗并返回0。
  • VMIN >0和 VTIME =0:read()函數(shù)會(huì)被阻塞直到 VMIN 個(gè)字節(jié)數(shù)據(jù)可被讀取。
  • VMIN =0和 VTIME >0:只要有數(shù)據(jù)可讀或者經(jīng)過VTIME 個(gè)1/10秒的時(shí)間,read()函數(shù)則立即返回,返回值為被讀取的字節(jié)數(shù)。如果超時(shí)并且未讀到數(shù)據(jù),則 read()函數(shù)返回0。
  • VMIN >0和 VTIME >0:當(dāng)有VMIN 個(gè)字節(jié)可讀或者兩個(gè)輸入字符之間的時(shí)間間隔超過VTIME個(gè)1/10秒時(shí),read()函數(shù)才返回。因?yàn)樵谳斎氲谝粋€(gè)字符之后系統(tǒng)才會(huì)啟動(dòng)定時(shí)器,所以在這種情況下,read()函數(shù)至少讀取一個(gè)字節(jié)之后才返回。

3. 原始模式

原始模式是一種特殊的非規(guī)范模式。在原始模式下,所有的輸入數(shù)據(jù)以字節(jié)為單位被處理。在這個(gè)模式下,終端是不可回顯的,而且所有特定的終端輸入/輸出控制處理不可用。通過調(diào)用 cfmakeraw()函數(shù)可以將終端設(shè)置為原始模式。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    596

    瀏覽量

    27510
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1156

    瀏覽量

    30006
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1558

    瀏覽量

    77056
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview串口通信的一些心得

    、由于通常情況下LabVIEW串口VI接收或發(fā)送的都是字符串(Normal),這里是指串口通信中,如果不是在串口通信,我們可以做個(gè)小小的驗(yàn)證,在前面板中,
    發(fā)表于 12-27 11:58

    labview串口通信的一些心得

    、由于通常情況下LabVIEW串口VI接收或發(fā)送的都是字符串(Normal),這里是指串口通信中,如果不是在串口通信,我們可以做個(gè)小小的驗(yàn)證, 在前面板中,
    發(fā)表于 11-30 19:47

    CC2540ble 的串口通信總是會(huì)數(shù),為什么?

    CC2540 ble 的串口通信總是會(huì)數(shù),為什么?我使用的是ble 1.4.1協(xié)議棧。直接使用里面的串口程序,總是會(huì)
    發(fā)表于 03-11 15:07

    關(guān)于串口一些分享

    串口是學(xué)習(xí)單片機(jī)重要的項(xiàng),用來顯示數(shù)據(jù)和一些簡單的控制命令非常方便,經(jīng)過筆者這幾天的測(cè)試,總結(jié)出了一些需要注意的地方:(以下代碼全部基于單片機(jī)STM32F407實(shí)現(xiàn))1、關(guān)于發(fā)送除非
    發(fā)表于 10-13 10:43

    LABVIEW讀取串口返回命令,字符丟失

    各位大神你們好,采用LABVIEW串口與下位機(jī)MCU通信,每60sMCU回復(fù)個(gè)CHARGE_OVER#的字符串,LABVIEW串口接受該字符
    發(fā)表于 08-31 17:13

    求助!!LABVIEW讀取串口返回命令,字符丟失

    各位大神你們好,采用LABVIEW串口與下位機(jī)MCU通信,每60sMCU回復(fù)個(gè)CHARGE_OVER#的字符串,LABVIEW串口接受該字符
    發(fā)表于 09-04 09:10

    GD32F310開發(fā)板串口一些特殊功能介紹

    串口主要用于通信和調(diào)試信息輸出,今天仔細(xì)觀察GDF310的數(shù)據(jù)手冊(cè)發(fā)現(xiàn)一些特殊功能:1、自動(dòng)波特率檢測(cè);2、數(shù)據(jù)發(fā)送/接受,高位在前/后;3、數(shù)據(jù)位反轉(zhuǎn);4、TX/RX管腳交換。針對(duì)以上的5個(gè)
    發(fā)表于 09-22 15:40

    CH582如果打印一些特殊功能按鍵應(yīng)該怎么修改呢?

    使用CH582開發(fā)板燒錄HostU2Enum代碼后,USB2插入鍵盤,使用串口打印鍵值,音量加減等一些特殊功能按鍵沒有打印出,請(qǐng)問官方如果打印這些特殊功能按鍵應(yīng)該具體怎么修改呢?
    發(fā)表于 10-09 07:19

    淺析串口通信的一些基本概念及常見問題

    下面先講串口通信的一些基本概念,術(shù)語。如果對(duì)串口通信比較熟悉的,就當(dāng)復(fù)習(xí)復(fù)習(xí),如果哪里講錯(cuò)或不到位,也可以及時(shí)指出,當(dāng)作塊交流交流。
    的頭像 發(fā)表于 11-11 11:17 ?6885次閱讀

    51單片機(jī)串口通信的一些基礎(chǔ)知識(shí)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)串口通信的一些基礎(chǔ)知識(shí)免費(fèi)下載。
    發(fā)表于 08-21 17:31 ?9次下載
    51單片機(jī)<b class='flag-5'>串口</b>通信的<b class='flag-5'>一些</b>基礎(chǔ)知識(shí)免費(fèi)下載

    關(guān)于C語言的一些特殊功能介紹

    C語言之所以那么受歡迎,除了C語言歷史悠久之外,還有它具有一些編程語言沒有的功能。那么,今年我們就來了解下C語言的一些特殊功能。
    的頭像 發(fā)表于 08-18 15:31 ?2508次閱讀
    關(guān)于C語言的<b class='flag-5'>一些</b><b class='flag-5'>特殊</b>功能介紹

    STM32中遇到的問題--關(guān)于串口一些常見問題

    在單片機(jī)的開發(fā)過程中,最常用的外設(shè)就是串口了,是用來進(jìn)行bug糾錯(cuò)、log輸出的常用工具,也是用來與外部通訊的常見協(xié)議之。 但是在使用串口的過程中難免會(huì)遇到一些問題,下面就我在工作遇
    發(fā)表于 12-24 18:51 ?2次下載
    STM32中遇到的問題--關(guān)于<b class='flag-5'>串口</b>的<b class='flag-5'>一些</b>常見問題

    格式化字符串常量f-strings一些不常見的特性

    【導(dǎo)語】:本文介紹了“格式化字符串常量”f-strings一些不常見的特性,包括:格式化日期和時(shí)間、同時(shí)打印變量名和變量值等,嵌套使用f-strings等,此外與其他格式化字符串的方法相比,f-strings的速度更快,因此,學(xué)
    的頭像 發(fā)表于 08-15 12:00 ?1199次閱讀

    一些封裝中沒有串口,或者串口已經(jīng)被用作其他用途,要如何輸出log?

    一些封裝中沒有串口,或者串口已經(jīng)被用作其他用途,要如何輸出log? 在一些封裝中,例如在裸機(jī)程序或者嵌入式系統(tǒng)中,因?yàn)榉N種原因,可能不存在串口
    的頭像 發(fā)表于 10-31 14:37 ?570次閱讀

    字符型LCD顯示器的應(yīng)用和例程

    字符型顯示器的應(yīng)用越來越普遍。熟悉一些字符型顯示器的使用顯得非常重要。我們還可以使用一些特殊字符
    的頭像 發(fā)表于 11-09 10:03 ?1712次閱讀
    <b class='flag-5'>字符</b>型LCD顯示器的應(yīng)用和例程
    百家乐官网有没有稳赢| 新葡京百家乐的玩法技巧和规则 | 大发888的比赛怎么报名| 恒丰百家乐官网的玩法技巧和规则 | 金世豪百家乐的玩法技巧和规则 | 澳门百家乐官网游戏说明| 水果机游戏| 百家乐官网第三张规则| 万博娱乐城| 百家乐官网洗码软件| 百家乐娱乐分析软件v4.0| 百家乐出千赌具| 百家乐官网网真人真钱群| 大发888 dafa888 octbay| 澳门百家乐博彩网| 百家乐官网号论坛博彩正网 | 至尊百家乐20130402| 百家乐官网打水套利| 百家乐官网开户首选| 葡京娱乐城姚记| 威尼斯人娱乐城网址| 百家乐桌定制| 百家乐最新投注法| A8百家乐官网赌场娱乐网规则| 百家乐官网十佳投庄闲法| 皇冠网都市小说| 大发888下注| 百家乐游戏什么时间容易出对| 太阳城百家乐祖玛| 百家乐官网皇室百家乐官网| 金臂百家乐官网开户送彩金| 洛扎县| ewin棋牌官网| 威尼斯人娱乐场xpjgw5xsjgw| 百家乐的各种打法| 百家乐游戏机分析仪| 太阳百家乐官网娱乐| 粤港澳百家乐官网娱乐平台 | 威尼斯人娱乐网反| 澳门百家乐官网网站| 百家乐视频网络游戏|