《linux串口編程(中嵌教育-嵌入式linux開發(fā)ppt課件)》由會員分享,可在線閱讀,更多相關(guān)《linux串口編程(中嵌教育-嵌入式linux開發(fā)ppt課件)(17頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,單擊此處編輯母版標題樣式,www.chinaEDA.cn,linux串口,應(yīng)用,開發(fā),串口,概述,串口設(shè)置,串口使用詳解,linux串口應(yīng)用開發(fā)串口概述,1,、,串口,概述,用戶常見的數(shù)據(jù)通信的基本方式有兩種:,并行通信;,串行通信;,串行通信是計算機常用的接口,如:,RS-232-C,接口。該標準規(guī)定采用一個,DB25,芯引腳連接器或,DB9,芯引腳連接器。,芯片內(nèi)部常具有,UART,控制器,其可工作于,Interrupt(,中斷模式,),或,DMA,(直接內(nèi)存訪問)模式。,1、串口概述用戶常見的數(shù)據(jù)通信的基本方式有兩種:,UART
2、,的操作主要包括以下幾個部分:,數(shù)據(jù)發(fā)送;,數(shù)據(jù)接收;,產(chǎn)生中斷;,產(chǎn)生波特率;,Loopback,模式;,紅外模式;,自動流控模式;,串口參數(shù)的配置主要包括:波特率、數(shù)據(jù)位、停止位、流控協(xié)議。,UART的操作主要包括以下幾個部分:,linux,中的串口設(shè)備文件存放于,/dev,目錄下,其中串口一,串口二對應(yīng)設(shè)備名依次為“,/dev/ttyS0”,、“,/dev/ttyS1”,。,在,linux,下操作串口與操作文件相同。,linux中的串口設(shè)備文件存放于/dev目錄下,其中串口一,2、串口詳細配置,在使用串口之前必須設(shè)置相關(guān)配置,包括:波特率、數(shù)據(jù)位、校驗位、停止位等。串口設(shè)置由下面結(jié)構(gòu)體實
3、現(xiàn):,2、串口詳細配置在使用串口之前必須設(shè)置相關(guān)配置,包括:波特,該結(jié)構(gòu)中,c_cflag,最為重要,可設(shè)置波特率、數(shù)據(jù)位、校驗位、停止位。在設(shè)置波特率時需在數(shù)字前加上,B,,如,B9600,。,B19200,。使用其需通過“與”“或”操作方式。,該結(jié)構(gòu)中c_cflag最為重要,可設(shè)置波特率、數(shù)據(jù)位、,輸入模式,c_iflag,成員控制端口接收端的字符輸入處理。,輸入模式c_iflag成員控制端口接收端的字符輸入處理,串口控制函數(shù),Tcgetattr,取屬性,(termios,結(jié)構(gòu),),Tcsetattr,設(shè)置屬性,(termios,結(jié)構(gòu),),cfgetispeed,得到輸入速度,Cfgeto
4、speed,得到輸出速度,Cfsetispeed,設(shè)置輸入速度,Cfsetospeed,設(shè)置輸出速度,Tcdrain,等待所有輸出都被傳輸,tcflow,掛起傳輸或接收,tcflush,刷清未決輸入和,/,或輸出,Tcsendbreak,送,BREAK,字符,tcgetpgrp,得到前臺進程組,ID,tcsetpgrp,設(shè)置前臺進程組,ID,串口控制函數(shù)Tcgetattr取屬性(termios結(jié)構(gòu),2.1串口配置流程,保存原先串口配置使用,tcgetattr(fd,&oldtio),函數(shù),struct termios newtio,oldtio;,tcgetattr(fd,&oldtio,);
5、,激活選項有,CLOCAL,和,CREAD,用于本地連接和接收使能。,newtio.c_cflag|=CLOCAL|CREAD;,設(shè)置波特率,使用函數(shù),cfsetispeed,、,cfsetospeed,cfsetispeed(,cfsetospeed(,2.1串口配置流程保存原先串口配置使用tcgetattr(f,設(shè)置數(shù)據(jù)位,需使用掩碼設(shè)置。,newtio.c_cflag,newtio.c_cflag|=CS8;,設(shè)置奇偶校驗位,使用,c_cflag,和,c_iflag,。,設(shè)置奇校驗:,newtio.c_cflag|=PARENB;,newtio.c_cflag|=PARODD;,newt
6、io.c_iflag|=(INPCK|ISTRIP);,設(shè)置偶校驗:,newtio.c_iflag|=(INPCK|ISTRIP);,newtio.c_cflag|=PARENB;,newtio.c_cflag,設(shè)置數(shù)據(jù)位,需使用掩碼設(shè)置。,設(shè)置停止位,通過激活,c_cflag,中的,CSTOPB,實現(xiàn)。若停止位為,1,,則清除,CSTOPB,,若停止位為,2,,則激活,CSTOPB,。,newtio.c_cflag,設(shè)置最少字符和等待時間,對于接收字符和等待時間沒有特別要求時,可設(shè)為,0,。,newtio.c_ccVTIME =0;,newtio.c_ccVMIN=0;,設(shè)置停止位,通過激活
7、c_cflag中的CSTOPB實現(xiàn)。若停,處理要寫入的引用對象,tcflush,函數(shù)刷清(拋棄)輸入緩存(終端驅(qū)動程序已接收到,但用戶程序尚未讀)或輸出緩存(用戶程序已經(jīng)寫,但尚未發(fā)送)。,int tcflush(int,filedes,int,queue,),queue,數(shù)應(yīng)當是下列三個常數(shù)之一:,TCIFLUSH,刷清輸入隊列。,TCOFLUSH,刷清輸出隊列。,TCIOFLUSH,刷清輸入、輸出隊列。,如:,tcflush(fd,TCIFLUSH);,處理要寫入的引用對象,激活配置。在完成配置后,需激活配置使其生效。使用,tsettattr(),函數(shù)。原型:,int tcgetattr(
8、int,filedes,struct termios*,termptr,);,int tcsetattr(int,filedes,int,opt,const struct termios*,termptr,);,tcsetattr,的參數(shù),opt,使我們可以指定在什么時候新的終端屬性才起作用。,opt,可以指定為下列常數(shù)中的一個:,TCSANOW,更改立即發(fā)生。,TCSADRAIN,發(fā)送了所有輸出后更改才發(fā)生。若更改輸出參數(shù)則應(yīng)使用此選擇項。,TCSAFLUSH,發(fā)送了所有輸出后更改才發(fā)生。更進一步,在更改發(fā)生時未讀的所有輸入數(shù)據(jù)都被刪除(刷清),使用如:,tcsetattr(fd,TCSAN
9、OW,&newtio),激活配置。在完成配置后,需激活配置使其生效。使用tsetta,3、串口使用詳解,在配置完串口的相關(guān)屬性后,就可對串口進行打開,讀寫操作了。其使用方式與文件操作一樣,區(qū)別在于串口是一個終端設(shè)備。,3、串口使用詳解 在配置完串口的相關(guān)屬性后,就可對串口進,3.1 打開串口,fd=open(/dev/ttyS0,O_RDWR|O_NOCTTY|O_NDELAY);,Open,函數(shù)中除普通參數(shù)外,另有兩個參數(shù),O_NOCTTY,和,O_NDELAY,。,O_NOCTTY:,通知,linix,系統(tǒng),這個程序不會成為這個端口的控制終端。,O_NDELAY:,通知,linux,系統(tǒng)不
10、關(guān)心,DCD,信號線所處的狀態(tài)(端口的另一端是否激活或者停止)。,3.1 打開串口fd=open(/dev/ttyS0,然后,恢復(fù)串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入。用,fcntl,函數(shù):,fcntl,(,fd,F_SETFL,0,),;,接著,測試打開的文件描述府是否引用一個終端設(shè)備,以進一步確認串口是否正確打開。,isatty(STDIN_FILENO);,然后,恢復(fù)串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入,3.2 讀寫串口,串口的讀寫與普通文件一樣,使用,read,write,函數(shù)。,read(fd,buff,8);,write(fd,buff,8);,實例見:,seri.c,3.2 讀寫串口 串口的讀寫與普通文件一樣,使用read,