新聞中心
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,串口通信逐漸被USB、網(wǎng)絡(luò)通信所取代,但是在某些場合下,串口通信仍然具有重要的地位,例如無人機(jī)飛行控制、智能儀器儀表等領(lǐng)域。對于進(jìn)行串口通信的任務(wù),Linux系統(tǒng)成為了開發(fā)者的首選平臺,因?yàn)長inux系統(tǒng)提供了豐富的串口驅(qū)動,可以很方便地進(jìn)行串口通信。本文將介紹。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、南漳網(wǎng)站維護(hù)、網(wǎng)站推廣。
一、串口通信的基本原理
串行口通信是指在傳輸時(shí),數(shù)據(jù)是按位進(jìn)行傳輸?shù)模總€(gè)字節(jié)的數(shù)據(jù)都是由一定的比特位組成。串口通信是通過在兩個(gè)設(shè)備之間建立一個(gè)物理連接來進(jìn)行數(shù)據(jù)傳輸?shù)模@個(gè)物理連接通常是一條串口電纜。串口通信中,數(shù)據(jù)傳輸一般工作在兩種不同的工作模式下:
1.異步串行傳輸:每個(gè)字符之間的時(shí)間間隔不是固定的,通過在每個(gè)字符幀中添加起始位、停止位和奇偶校驗(yàn)位來處理數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
2.同步串行傳輸:每個(gè)字節(jié)之間的時(shí)間間隔是固定的,數(shù)據(jù)以塊的形式傳輸,不需要添加起始位、停止位或者奇偶校驗(yàn)位。
串口通信中的接收方需要先將串口接口的硬件型號與串口通信的模式匹配,即數(shù)據(jù)位(bit)、奇偶校驗(yàn)位和停止位(stop bit),才能正確地接收到通信數(shù)據(jù)。
二、Linux下顯示串口數(shù)據(jù)的方法
在Linux系統(tǒng)中,顯示串口數(shù)據(jù)的方法主要有兩種:使用minicom和termios庫函數(shù)。
1.使用minicom
minicom是Linux系統(tǒng)中的一種串口終端模擬器,它提供了對串口的輸入輸出、數(shù)據(jù)傳輸監(jiān)控以及串口參數(shù)設(shè)置等功能,因此它常常被用來測試串口通信。下面介紹使用minicom來顯示串口輸出的方法。
首先安裝minicom:
“`
sudo apt-get install minicom
“`
然后將終端連接到串口:
“`
sudo minicom -s
“`
打開minicom命令行配置界面,選擇“Serial port setup”,在里面選擇所要連接的串口設(shè)備。通常,串口設(shè)備在Linux系統(tǒng)中表示為/dev/ttyS0,/dev/ttyS1,/dev/ttyS2等等。在選擇完串口設(shè)備后,繼續(xù)選擇”parameters”,在里面設(shè)置串口數(shù)據(jù)位、波特率等參數(shù):

按確定后,回到主界面,可以看到它已經(jīng)開始接收到串口傳輸?shù)臄?shù)據(jù)了:

2.使用termios庫函數(shù)
termios是Linux系統(tǒng)提供的一個(gè)串口通信的驅(qū)動程序,它提供了一系列函數(shù)調(diào)用來對串口進(jìn)行控制和配置。下面介紹使用termios庫函數(shù)來顯示串口輸出的方法。
之一步,打開串口設(shè)備并設(shè)置串口參數(shù):
“`
#include
#include
int OpenPort(char *dev,int speed)
{
int fd;
struct termios options; // 串口設(shè)備的設(shè)置
fd = open(dev,O_RDWR | O_NOCTTY); // 打開串口設(shè)備
if(fd == -1)
{
perror(“open “);
return -1;
}
tcgetattr(fd,&options); // 獲取serial port的配置參數(shù)
// 設(shè)置波特率
switch(speed)
{
case 9600:
cfsetispeed(&options,B9600);
cfsetospeed(&options,B9600);
break;
case 19200:
cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);
break;
case 38400:
cfsetispeed(&options,B38400);
cfsetospeed(&options,B38400);
break;
case 57600:
cfsetispeed(&options,B57600);
cfsetospeed(&options,B57600);
break;
case 115200:
cfsetispeed(&options,B115200);
cfsetospeed(&options,B115200);
break;
default:
cfsetispeed(&options,B9600);
cfsetospeed(&options,B9600);
break;
}
// 設(shè)置數(shù)據(jù)位、停止位、奇偶校驗(yàn)位
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
tcsetattr(fd,TCSANOW,&options); // 使設(shè)置立即生效
return fd;
}
“`
第二步,讀取串口數(shù)據(jù)并進(jìn)行輸出:
“`
char buf[256];
ssize_t n;
n = read(fd,buf,sizeof(buf)); // 從串口讀取數(shù)據(jù)
write(STDOUT_FILENO,buf,n); // 將讀取的數(shù)據(jù)輸出到終端
“`
代碼中,使用了termios庫函數(shù)來設(shè)置串口參數(shù)以及讀取串口數(shù)據(jù),并使用標(biāo)準(zhǔn)輸出函數(shù)將讀取的數(shù)據(jù)輸出到終端。
三、
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220Linux C 配置串口
配置串口需要包含
頭文件
其中最核心的配置
結(jié)構(gòu)體
為:
如何獲取該結(jié)構(gòu)呢?我們操作串口跟操作文件一樣,也是調(diào)用 open() 函數(shù)來打開串口,
這樣我們就能夠得到一個(gè)
文件描述符
fd ,然后就可以調(diào)用 tcgetattr() 函數(shù)來獲取上述配置結(jié)構(gòu)體了。
Linux 串口默認(rèn)的配置為:
波特率
9600,數(shù)據(jù)位 8 位,無
奇偶校驗(yàn)
,停止位 1 位,無 CTS/RTS 。
以下介紹一些常用的配置項(xiàng):波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位、硬件控制流。
相關(guān)接口:
Linux 將串口的波特率辯笑分為了輸入波特率和輸出波特率,不過最常用的場景是將兩者設(shè)置成一樣。
cfgetispeed() 函數(shù)獲取輸入波特率, cfgetospeed() 函數(shù)獲取輸出波特率。 cfsetispeed() 函數(shù)設(shè)置輸入波特率, cfsetospeed() 函數(shù)用于設(shè)置輸如掘出波特率,當(dāng)然 cfsetspeed() 函數(shù)擴(kuò)展為同時(shí)設(shè)置輸入和輸出波特率。
上述接口中的 speed_t 是一系列波特率的標(biāo)志位,例如常用的波特率就為 B115200,參考下述選項(xiàng):
設(shè)置奇渣灶核偶校驗(yàn)位可以通過修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來實(shí)現(xiàn),若無校驗(yàn),則將 PARENB 位設(shè)為 0;若有校驗(yàn),則 PARENB 為 1。之后再根據(jù) PARODD 來區(qū)分奇偶校驗(yàn), PARODD 為 1 表示奇校驗(yàn), PARODD 為 0 表示偶校驗(yàn)。例如設(shè)置無奇偶校驗(yàn)位:
設(shè)置數(shù)據(jù)位可以通過修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來實(shí)現(xiàn),CS5、CS6、CS7 和 CS8 分別代表數(shù)據(jù)位 5、6、7 和 8。不過在設(shè)置數(shù)據(jù)位之前,需要先用 CSIZE 來做屏蔽字段,清楚這幾個(gè)標(biāo)志位,例如設(shè)置數(shù)據(jù)位為 8 位:
設(shè)置停止位可以通過修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來實(shí)現(xiàn), CSTOPB 位為 1 表示 2 位停止位, CSTOPB 位為 0 標(biāo)志 1 位停止位。例如設(shè)置停止位為 1 位:
設(shè)置硬件控制流可以通過修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來實(shí)現(xiàn), CRTSCTS 為 1 表示使用硬件控制流,為 0 表示不使用硬件控制流。例如
使能
硬件控制流:
當(dāng)然,最后還需要用 tcflush() 拋棄存儲在 fd 里的未接收的數(shù)據(jù)。
再利用接口 tcsetattr() 函數(shù)將配置信息寫入文件描述符 fd :
這樣整個(gè)串口最常用的用法就配置完成了。
具體的配置使用可以參考我的項(xiàng)目 HCI-Middleware 里的 hci_transport_uart_linux.c 文件。
參考:
linux 顯示串口數(shù)據(jù)處理的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 顯示串口數(shù)據(jù)處理,Linux下顯示串口數(shù)據(jù)的簡單處理方法,Linux C 配置串口的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開發(fā),成都網(wǎng)絡(luò)營銷推廣等一站式服務(wù)。
新聞名稱:Linux下顯示串口數(shù)據(jù)的簡單處理方法(linux顯示串口數(shù)據(jù)處理)
文章路徑:http://fisionsoft.com.cn/article/coosspp.html


咨詢
建站咨詢
