日韩av色在线_av不卡在线观看_亚洲国产精品第一页_在线看日本不卡_色成人综合网_国产丝袜在线视频_国产精成人品localhost_国产91富婆露脸刺激对白_韩国视频一区_国产精品人成电影

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 資深程序員告訴你串口配置的詳細流程,不容錯過

資深程序員告訴你串口配置的詳細流程,不容錯過 時間:2018-06-20      來源:未知

1,按照通信的基本方式分類,可以分為以下兩類:

1)并行通信

2)串行通信兩種。

并行通信是指利用多條數據傳輸線將一個資料的各位同時傳送。它的特點是傳輸速度

快,適用于短距離通信,但要求傳輸速度較高的應用場合。

串行通信是指利用一條傳輸線將資料一位位地順序傳送。特點是通信線路簡單,利用

簡單的線纜就可實現通信,降低成本,適用于遠距離通信,但傳輸速度慢的應用場合。

那么接下來我們就來分析串口設置:

一般情況下,我們對串口中最基本的包括:波特率設置,校驗位和停止位設置。然而串口的設置主要是設置struct termios結構體的各成員值,如下所示:

struct termio

{

unsigned short c_iflag; /* 輸入模式標志 */

unsigned short c_oflag; /* 輸出模式標志 */

unsigned short c_cflag; /* 控制模式標志*/

unsigned short c_lflag; /*本地模式標志 */

unsigned char c_line; /* line discipline */

unsigned char c_cc[NCC]; /* control characters */

};

在這個結構中最為重要的是c_cflag,通過對它的賦值,用戶可以設置波特率、字符大小、

數據位、停止位、奇偶校驗位和硬件流控等。另外c_iflag 和c_cc 也是比較常用的標志。

波特率:即每秒傳輸的位數,一般情況下有以下幾種:

B0 0波特率(放棄DTR)

B1800 1800波特率

B2400 2400波特率

B4800 4800波特率

B9600 9600波特率

B19200 19200波特率

B38400 38400波特率

B57600 57600波特率

B115200 115200波特率

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

struct termios newtio,oldtio;

/*保存測試現有串口參數設置,在這里如果串口號等出錯,會有相關的出錯信息*/

if ( tcgetattr( fd,&oldtio) != 0)

{

perror("SetupSerial 1");

return -1;

}

bzero( &newtio, sizeof( newtio ) );

/*步驟一,設置字符大小*/

newtio.c_cflag |= CLOCAL | CREAD;

newtio.c_cflag &= ~CSIZE;

/*設置停止位*/

switch( nBits )

{

case 7:

newtio.c_cflag |= CS7;

break;

case 8:

newtio.c_cflag |= CS8;

break;

}

/*設置奇偶校驗位*/

switch( nEvent )

{

case 'O': //奇數

newtio.c_cflag |= PARENB;

newtio.c_cflag |= PARODD;

newtio.c_iflag |= (INPCK | ISTRIP);

break;

case 'E': //偶數

newtio.c_iflag |= (INPCK | ISTRIP);

newtio.c_cflag |= PARENB;

newtio.c_cflag &= ~PARODD;

break;

case 'N': //無奇偶校驗位

newtio.c_cflag &= ~PARENB;

break;

}

/*設置波特率*/

switch( nSpeed )

{

case 2400:

cfsetispeed(&newtio, B2400);

cfsetospeed(&newtio, B2400);

break;

case 4800:

cfsetispeed(&newtio, B4800);

cfsetospeed(&newtio, B4800);

break;

case 9600:

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

break;

case 115200:

cfsetispeed(&newtio, B115200);

cfsetospeed(&newtio, B115200);

break;

case 460800:

cfsetispeed(&newtio, B460800);

cfsetospeed(&newtio, B460800);

break;

default:

cfsetispeed(&newtio, B9600);

cfsetospeed(&newtio, B9600);

break;

}

/*設置停止位*/

if( nStop == 1 )

newtio.c_cflag &= ~CSTOPB;

else if ( nStop == 2 )

newtio.c_cflag |= CSTOPB;

/*設置等待時間和最小接收字符*/

newtio.c_cc[VTIME] = 0;

newtio.c_cc[VMIN] = 0;

/*處理未接收字符*/

tcflush(fd,TCIFLUSH);

/*激活新配置*/

if((tcsetattr(fd,TCSANOW,&newtio))!=0)

{

perror("com set error");

return -1;

}

printf("set done!\n");

return 0;

}

在配置完串口的相關屬性后,就可對串口進行打開,讀寫操作了。其使用方式與文件操作一樣,區別在于串口是一個終端設備。

2,打開串口:

串口位于/dev中,可作為標準文件的形式打開,其中:

串口1 /dev/ttyS0

串口2 /dev/ttyS1

fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);

Open函數中除普通參數外,另有兩個參數O_NOCTTY和O_NDELAY。

O_NOCTTY: 通知linix系統,這個程序不會成為這個端口的控制終端。

O_NDELAY: 通知Linux系統不關心DCD信號線所處的狀態(端口的另一端是否激活或者停止)。

然后,恢復串口的狀態為阻塞狀態,用于等待串口數據的讀入。用fcntl函數:

fcntl(fd, F_SETFL, 0);

接著,測試打開的文件描述府是否引用一個終端設備,以進一步確認串口是否正確打開。

isatty(STDIN_FILENO);

串口的讀寫與普通文件一樣,使用read,write函數。

read(fd,buff,8);

write(fd,buff,8);

3,linux串口編程需要的頭文件

#include //標準輸入輸出定義

#include //標準函數庫定義

#include //Unix標準函數定義

#include

#include

#include //文件控制定義

#include //POSIX中斷控制定義

#include //錯誤號定義

4,設置數據位、停止位和校驗位

以下是幾個數據位、停止位和校驗位的設置方法:(以下均為1位停止位)

8位數據位、無校驗位:

Opt.c_cflag &= ~PARENB;

Opt.c_cflag &= ~CSTOPB;

Opt.c_cflag &= ~CSIZE;

Opt.c_cflag |= CS8;

7位數據位、奇校驗:

Opt.c_cflag |= PARENB;

Opt.c_cflag |= PARODD;

Opt.c_cflag &= ~CSTOPB;

Opt.c_cflag &= ~CSIZE;

Opt.c_cflag |= CS7;

7位數據位、偶校驗:

Opt.c_cflag |= PARENB;

Opt.c_cflag &= ~PARODD;

Opt.c_cflag &= ~CSTOPB;

Opt.c_cflag &= ~CSIZE;

Opt.c_cflag |= CS7;

7位數據位、Space校驗:

Opt.c_cflag &= ~PARENB;

Opt.c_cflag &= ~CSTOPB;

Opt.c_cflag &= ~CSIZE;

Opt.c_cflag |= CS7;

5,某些設置項

在上面我們看到一些比較特殊的設置,下面簡述一下他們的作用。

c_cc數組的VSTART和VSTOP元素被設定成DC1和DC3,代表ASCII標準的XON和XOFF字符,如果在傳輸這兩個字符的時候就傳不過去,需要把軟件流控制屏蔽,即:

Opt.c_iflag &= ~ (IXON | IXOFF | IXANY);

有時候,在用write發送數據時沒有鍵入回車,信息就發送不出去,這主要是因為我們在輸入輸出時是按照規范模式接收到回車或換行才發送,而更多情況下我們是不必鍵入回車或換行的。此時應轉換到行方式輸入,不經處理直接發送,設置如下:

Opt.c_lflag &= ~ (ICANON | ECHO | ECHOE | ISIG);

還存在這樣的情況:發送字符0X0d的時候,往往接收端得到的字符是0X0a,原因是因為在串口設置中c_iflag和c_oflag中存在從NL-CR和CR-NL的映射,即串口能把回車和換行當成同一個字符,可以進行如下設置屏蔽之:

Opt.c_iflag &= ~ (INLCR | ICRNL | IGNCR);

Opt.c_oflag &= ~(ONLCR | OCRNL);

注意:控制符VTIME和VMIN之間有復雜的關系。VTIME定義要求等待的時間(百毫米,通常是unsigned char變量),而VMIN定義了要求等待的最小字節數(相比之下,read函數的第三個參數指定了要求讀的最大字節數)。

如果VTIME=0,VMIN=要求等待讀取的最小字節數,read必須在讀取了VMIN個字節的數據或者收到一個信號才會返回。

如果VTIME=時間量,VMIN=0,不管能否讀取到數據,read也要等待VTIME的時間量。

如果VTIME=時間量,VMIN=要求等待讀取的最小字節數,那么將從read讀取第一個字節的數據時開始計時,并會在讀取到VMIN個字節或者VTIME時間后返回。

如果VTIME=0,VMIN=0,不管能否讀取到數據,read都會立即返回

讀寫串口

發送數據方式如下,write函數將返回寫的位數或者當錯誤時為-1。

char buffer[1024];

int length;

int nByte;

nByte = write(fd, buffer, length);

讀取數據方式如下,原始數據模式下每個read函數將返回實際串口收到的字符數,如果串口中沒有字符可用,回叫將會阻塞直到以下幾種情況:有字符進入;一個間隔計時器失效;錯誤發送。

在打開串口成功后,使用fcntl(fd, F_SETFL, FNDELAY)語句,可以使read函數立即返回而不阻塞。FNDELAY選項使read函數在串口無字符時立即返回且為0。

char buffer[1024];

int length;

int readByte;

readByte = read(fd, buffer, len);

注 意:設置為原始模式傳輸數據的話,read函數返回的字符數是實際串口收到的字符數。Linux下直接用read讀串口可能會造成堵塞,或者數據讀出錯 誤,此時可使用tcntl或者select等函數實現異步讀取。用select先查詢com口,再用read去讀就可以避免上述錯誤。

6,關閉串口

串口作為文件來處理,所以一般的關閉文件函數即可:

close(fd);

上一篇:socket進程間通信方式大總結,還有典型實例哦

下一篇:linux進程間通信-FIFO,讓你全方位理解

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

日韩亚洲欧美综合| av免费在线一区二区三区| 波多野吉衣中文字幕| 欧美一区二区三区四区五区六区| 欧美精品一区二区三区在线播放 | 欧美另类一区二区三区| 白白色 亚洲乱淫| 天天射成人网| 巨大黑人极品videos精品| 日本不卡视频一区二区| 九色资源网91| 91久久精品无码一区二区| 变态另类ts人妖一区二区| 国产欧美高清在线| 色阁综合av| 国产在线视频欧美| 九九热精品在线| 日韩欧美国产1| 免费人成黄页网站在线一区二区| 亚洲最好看的视频| 久久婷婷五月综合色丁香| 欧美69xxxx| 久草在线免费福利| 人与牲动交xxxbbb| 亚洲另类图片另类电影| 日韩精品国产一区二区| 熟女俱乐部一区二区视频在线| 日本久久久精品视频| 日韩av图片| 国产精品欧美在线| 欧美xxxx做受欧美| 亚洲天堂男人天堂女人天堂| 中文字幕五月欧美| 成人日韩在线观看| 国产自产v一区二区三区c| 午夜国产精品影院在线观看| 久久久久久中文字幕| www日韩在线观看| 亚洲精品久久久久久| 国内自拍视频在线播放| 日韩有码片在线观看| 国产a区久久久| 99久久久无码国产精品| 欧美另类高清视频在线| 午夜精品免费视频| 国产性色av一区二区| 欧美电影免费观看完整版| 一本色道久久综合亚洲aⅴ蜜桃| 中文在线一区二区| 91在线观看视频| 精品在线一区二区| 激情久久综合| 一区二区电影| blacked蜜桃精品一区| 国产精品nxnn| 一区二区在线视频观看| 91在线成人| 成人软件在线观看| 成人性生交大片免费网站| 国产美女高潮在线| gogo久久| 亚洲黄色中文字幕| 婷婷激情一区| 青草综合视频| 国产视频一区二区在线播放| 99精品国自产在线| 日韩欧美专区| 日本精品在线播放| 久久综合五月婷婷| 精品一区免费| blacked蜜桃精品一区| 成人一级毛片| 亚洲视频电影在线| 亚洲国产专区| 亚洲一区二区动漫| 米奇777在线欧美播放| 蜜臀av性久久久久蜜臀aⅴ| 久久精品国产亚洲高清剧情介绍| 久久精品99久久久| 国产成人一区在线| 久久婷婷一区二区三区| 国产精品视频看| 亚洲精品成a人| 欧美日韩精品国产| 91精品国产综合久久香蕉麻豆 | 久草一区二区| 欧美资源一区| 国产精品va在线观看无码| 国产l精品国产亚洲区久久| 亚洲欧美国产中文| 女人被狂躁c到高潮| 刘亦菲国产毛片bd| 亚洲一区 视频| 夜夜嗨av禁果av粉嫩avhd| 精品国产九九九| 影音先锋男人资源站在线观看| 国产剧情av片巨作醉酒女邻居| 波多野结衣手机在线视频| 最新黄色av网址| 在线能看的av| 日本高清视频在线| 69堂视频在线观看国产| 五月天亚洲激情| 国产一区精品| 成人黄色动漫| 风间由美中文字幕在线看视频国产欧美 | 久久se精品一区二区| 99精品一区二区| 亚洲精品视频在线观看免费| 欧美日韩免费观看一区二区三区| 精品999在线播放| 久久久精品影院| 国产精品久久久久久久久久三级| 国产成人免费电影| 国产乱子伦精品视频| 中文字幕一二三区| 九九九免费视频| 丁香花免费高清完整在线播放| 99久久精品一区二区三区| 中国一级特黄毛片大片| 五月花成人网| 精品人人人人| 水野朝阳av一区二区三区| 久久久夜色精品亚洲| 在线看国产日韩| 亚洲天堂av在线播放| 国产精品久久久久久久一区探花| 欧美lavv| 天天色综合天天色| 草视频在线观看| 三级网站在线看| www.久草| 免费高潮视频95在线观看网站| 亚洲欧美校园春色| 日本午夜精品视频在线观看| 亚洲少妇30p| 日韩精品黄色网| 国产有码一区二区| 久久国产亚洲精品无码| 99热6这里只有精品| 色窝窝无码一区二区三区| 成人午夜激情| 韩国三级一区| 伊人成人网在线看| 国产精品第四页| 亚洲欧美福利视频| 国产成人成网站在线播放青青| 成年人小视频网站| 日韩av无码中文字幕| 精品国语对白精品自拍视| 日本天堂影院在线视频| 精品欧美视频| 久久资源在线| 亚洲超碰精品一区二区| 久久久97精品| 日本免费高清不卡| 亚洲天堂美女视频| 精品国产99久久久久久宅男i| 无套内精的网站| 日韩在线免费| 狂野欧美一区| 五月激情综合网| 不卡一卡二卡三乱码免费网站| 在线欧美日韩精品| 国产91成人在在线播放| av 日韩 人妻 黑人 综合 无码| 欧美黄色激情视频| 伦理天堂电影| 亚洲无线看天堂av| 午夜精品久久| 一区二区三区在线播| 精品国偷自产在线| 国产精品亚洲天堂| 欧美风情第一页| 国产你懂的在线观看| yellow91字幕网在线| 日韩欧美视频专区| 亚洲欧洲www| 久久亚洲精品小早川怜子66| 中文字幕一区二区三区四区五区六区| 黄色录像a级片| 一区二区视频在线观看免费的| 成年人免费在线视频| 欧美一级本道电影免费专区| 国产精品人人做人人爽人人添| 日韩在线视频播放| 看一级黄色录像| 国语对白一区二区| 91人人网站| 日韩黄色网络| 亚洲色图一区二区| 青草青草久热精品视频在线观看| 亚洲三级视频网站| 国产综合在线播放| 91国内在线| 日韩不卡免费视频| 精品欧美一区二区三区精品久久| 国产精品自拍首页| 天美传媒免费在线观看| 日本一卡2卡三卡4卡网站| 四虎4545www精品视频| 久99久精品视频免费观看| 精品国产一二三| 亚洲欧美日韩不卡一区二区三区| 欧美黄色免费在线观看| 97高清视频| 视频一区中文| 亚洲成av人影院在线观看网| 国产精品久久久久久av下载红粉| 超碰人人cao| 4hu四虎永久网址| 浪潮色综合久久天堂| 播五月开心婷婷综合| 日韩中文字幕第一页| 欧美黄色免费影院| 天堂av2024| 第84页国产精品| jizz一区二区| 午夜精品视频网站| 五月天丁香社区| 羞羞视频免费| 韩国女主播一区二区三区| 成人免费小视频| 国产欧美精品久久久| www色com| 性欧美18+| 亚洲精品电影| 欧美一区二区成人6969| 视频一区二区视频| 国产裸体无遮挡| 久久男人av资源站| 99re6这里只有精品视频在线观看| 久久成人一区二区| 婷婷激情四射五月天| 手机看片日韩| 成人直播在线观看| 日韩欧美视频| 在线亚洲免费视频| 性刺激综合网| www.天天干.com| 成人不卡视频| 亚洲黄色在线视频| 精品国产免费一区二区三区| 日韩欧美高清在线观看| 色综合久久影院| 国内一区二区在线| 欧美激情视频一区二区三区不卡| 国产无套精品一区二区三区| 免费污污网站| 国产精品久久久久无码av| 精品日本一线二线三线不卡| 人妻熟女一二三区夜夜爱| 中文在线资源新版官网| 粉嫩av一区二区| 日本高清无吗v一区| 中文字幕黄色大片| 人人妻人人澡人人爽人人欧美一区| 欧美成人福利| 亚洲国产视频a| 亚洲欧美日韩精品在线| 亚洲免费一级片| 日韩视频一区二区三区四区| 欧美日韩综合视频网址| 一区二区三区四区免费观看| 日本黄色免费视频| 盗摄牛牛av影视一区二区| 欧美亚洲动漫制服丝袜| 国产一线二线三线女| 久久精品视频在线观看榴莲视频| 精品大片一区二区| 日韩成人免费视频| 不卡的一区二区| 含羞草激情视频| 久久狠狠一本精品综合网| 久久精品视频免费播放| 久久久视频6r| 1024免费在线视频| 久久嫩草精品久久久久| 国产伦视频一区二区三区| 国产精品久久免费| 凹凸成人在线| 精品粉嫩超白一线天av| 4438x全国最大成人| 激情视频免费观看在线| 秋霞a级毛片在线看| 午夜福利三级理论电影| 欧美日产在线观看| 欧美色一级片| 色视频在线观看在线播放| 成人啪啪免费看| 日本一区二区综合亚洲| 色综合天天综合网国产成人综合天| 日本欧美高清| 亚洲一区二区不卡免费| 精精国产xxxx视频在线播放| 国产一区二区三区中文字幕| 亚洲综合欧美日韩| 亚洲第一福利网| 另类人妖一区二区av| 尤物视频在线看| 天天舔天天干天天操| 精品99在线视频| 久久久这里只有精品视频| 国产清纯白嫩初高生在线观看91| 波多野结衣亚洲一二三| 国产精品亚洲色图| 中文字幕在线观看视频www| 亚洲第一综合天堂另类专| 久久爱www久久做| 精品欧美日韩精品| 激情小说图片视频| 国产在线综合网| 日日摸日日碰夜夜爽无码| 午夜精品在线视频| 欧美日韩国产一区在线| 久久综合国产| a4yy在线播放免费观看视频| 国产成人无码精品久久久久| av无码久久久久久不卡网站| 日本精品视频在线观看| 91精品欧美福利在线观看| 久久看人人爽人人| 9999国产精品| 亚洲天堂手机| 国产高清免费av在线| 久久久综合久久久| 色一情一乱一伦一区二区三欧美| 精品视频久久久久久久| 亚洲人成伊人成综合网小说| 免播放器亚洲| 蜜桃视频久久一区免费观看入口| 国产精久久久久| 日韩一区免费观看| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品一区在线| 久久久久国产精品| av影片免费在线观看| 无码精品视频一区二区三区| 国产馆在线观看| av亚洲天堂网| 天天做天天躁天天躁| 999国产在线| 亚洲97在线观看| 一区国产精品视频| 欧美日本韩国一区| 亚洲成人自拍网| 粉嫩欧美一区二区三区高清影视| 欧美日本亚洲韩国国产| 久久亚洲精品爱爱| 你懂的视频在线播放| 99re热在线观看| 国产成人亚洲精品乱码在线观看| 99在线精品视频免费观看20| 久久久精品国产sm调教| 官网99热精品| 欧美视频一区二区三区在线观看| 久久久久久久久丰满| 日本欧美在线| 欧美白人做受xxxx视频| av午夜电影| 国产又爽又黄又嫩又猛又粗| 久久国产视频一区| 999av视频| 网曝门事件国产精品二区| 国内精品麻豆| 97秋霞电影网| 国产高清在线看| 波多野结衣在线高清| 国内精品卡一卡二卡三新区| 国产精品天堂| 日韩伦理福利| gogo人体一区| xxx在线视频| 九七影院97影院理论片免费| 黄色av免费在线看| 日本三级在线观看网站| 手机在线观看av网站| 日韩一区免费| 国内精品久久久久久久影视蜜臀| 日韩二区三区在线观看| www.66久久| 欧美日韩在线观看视频| 国产精品毛片一区二区在线看| 66久久国产| 视频一区二区国产| 国产伦精品一区二区三区视频青涩| 久久综合久色欧美综合狠狠| 日本一区二区三区四区 | 蜜桃传媒入口| 中文字幕av网| 五月天激情在线| 欧美午夜精彩| 国产亚洲精品资源在线26u| 91精品国产美女浴室洗澡无遮挡| 亚洲国产欧美精品| 欧美一级在线播放| 免费久久99精品国产自| 成人在线观看黄| 永久免费观看片现看| 国产又粗又猛又爽又黄视频 |