第8講 ARM-Linux串口通信程序設計_第1頁
第8講 ARM-Linux串口通信程序設計_第2頁
第8講 ARM-Linux串口通信程序設計_第3頁
第8講 ARM-Linux串口通信程序設計_第4頁
第8講 ARM-Linux串口通信程序設計_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1嵌入式系統(tǒng)第8講ARM-Linux串口通信程序設計編輯ppt串行通信方式每次傳送一個bit的通信方式,字符被分成一串bits來傳輸。串行數(shù)據(jù)的速度通常用每秒傳輸?shù)淖止?jié)數(shù)bits-per-second(bps)或者波特率(baud)表示。編輯ppt串口設備計算機開展歷史中,串口廣泛用于連接外設;雖然速度慢,卻現(xiàn)在仍然廣泛使用某些計算機使用稱為UART〔UniversalAsynchronousReceiver/Transmitter,通用異步接收/發(fā)送裝置〕的集成電路來作為串口設備。它完成計算機內(nèi)并行數(shù)據(jù)和設備端口串行數(shù)據(jù)的轉(zhuǎn)換〔輸入輸出FIFO〕;并且可以自動地處理數(shù)據(jù)的時序。而某些低端設備那么會讓CPU直接來傳送數(shù)據(jù)。編輯pptRS-232RS-232是EIA(ElectronicIndustriesAssociation)定義的串行通信的電器接口.分為DB-9和DB-25兩種接口。DB-9定義編輯pptRS-232DB-25定義編輯ppt串行異步通信格式異步模式:空閑時串口一直是1;當有數(shù)據(jù)時,總是以一個start位開始,start位是0;串口隨時可進行傳輸,不需時鐘也不用定義同步幀頭幀尾,故稱異步通信在start〔0〕之后,字符編碼可以是7bits或者8bits之后可能有parity奇偶校驗位和stop停止位〔1,1.5或者2bits〕所以通常用8-N-1、7-E-1等方式來描述編輯ppt流控兩個串口設備之間,可能因為鏈路差異等原因,需要進行數(shù)據(jù)流的協(xié)調(diào),一般兩種方法:軟件流控:以XON〔八進制021〕標示開始,以XOFF〔八進制023〕標示結(jié)束硬件流控:RTS〔發(fā)送方準備好發(fā)出ReadytoSend)和CTS〔接收方準備好發(fā)出CleartoSent〕握手信號編輯pptLinux下訪問串口設備文件Linux下設備是以設備文件方式來訪問的,串口也是如此。在linux系統(tǒng)下面,每一個串口設備都有設備文件與其關聯(lián),設備文件位于系統(tǒng)的/dev目錄下面。如linux下的/ttyS0,/ttyS1分別表示的是串口1和串口2。編輯ppt頭文件#include<stdio.h>/*標準輸入輸出定義*/#include<stdlib.h>/*標準函數(shù)庫定義*/#include<unistd.h>/*Unix標準函數(shù)定義*/#include<sys/types.h>/*數(shù)據(jù)類型定義*/#include<sys/stat.h>/*文件屬性定義*/#include<fcntl.h>/*文件控制定義*/#include<termios.h>/*POSIX終端控制定義*/#include<errno.h>/*錯誤號定義*/#include<string.h>/*字符串功能函數(shù)*/編輯ppt串口程序相關函數(shù)串口參數(shù)設定和文件操作的幾個重要函數(shù)編輯ppt翻開串口intopen〔“DE_name〞,intopen_Status〕參數(shù)說明:〔1〕.DE_name:要翻開的設備文件名比方要翻開串口1,即為/dev/ttyS0?!?〕.open_Status:文件翻開方式,可采用下面的文件翻開模式;函數(shù)返回值:成功返回文件描述符,如果失敗返回-1編輯ppt編輯pptintfd;/*文件描述符*/fd=open("/dev/ttyS0",O_RDWR|0_NOCTTY);/*以讀寫方式翻開設備*/if(fd==-1)perror("openttyS0/n!");/*翻開失敗時的錯誤提示*/編輯pptclose(fd);參數(shù)說明:fd:文件描述符函數(shù)返回值:成功返回0,失敗返回-1。關閉串口編輯ppt串口配置與終端標準結(jié)構(gòu)體配置串口主要通過tcgetattr()和tcsetattr()這兩個函數(shù)。他們均使用一個結(jié)構(gòu)體,該結(jié)構(gòu)體對終端的輸入、輸出、硬件特性、控制協(xié)議等方面進行了定義,具體定義形式如下:structtermios{

tcflag_t c_iflag;輸入?yún)?shù) tcflag_t c_oflag;輸出參數(shù) tcflag_t c_cflag;控制參數(shù) tcflag_t c_lflag;本地模式 cc_t c_line;行控制 cc_t c_cc[NCCS];控制字符};編輯ppt終端標準結(jié)構(gòu)體說明其中參數(shù):c_iflag輸入?yún)?shù)設置;c_oflag輸出參數(shù)設置;c_cflag設置決定終端硬件特性的控制標志,包括數(shù)據(jù)位寬度、停止位、奇偶校驗位等c_lflag存放本地模式(與用戶交互〕設置c_cc用來控制數(shù)據(jù)發(fā)送到調(diào)用程序的方式編輯ppt輸入選項c_iflag注:NL=newline編輯ppt輸出選項c_oflag編輯ppt控制選項c_cflag編輯pptc_lflag編輯pptc_cc編輯pptCflag設置舉例Noparity(8N1) options.c_cflag&=~PARENB;//關閉校驗 options.c_cflag&=~CSTOPB;//設置停止位 options.c_cflag&=~CSIZE;//設置數(shù)據(jù)位 options.c_cflag|=CS8;Evenparity(7E1) options.c_cflag|=PARENB;//開啟校驗 options.c_cflag&=~PARODD;//偶校驗模式 options.c_cflag&=~CSTOPB; options.c_cflag&=~CSIZE; options.c_cflag|=CS7;編輯ppt串口設置函數(shù)編輯ppttcsetattrinttcsetattr〔intfd,intopt_DE,*ptr〕該函數(shù)用來設置終端控制屬性,其參數(shù)說明如下:fd:待操作的文件描述符opt_DE:選項值,有三個選項以供選擇:TCSANOW:不等數(shù)據(jù)傳輸完畢就立即改變屬性TCSADRAIN:等待所有數(shù)據(jù)傳輸結(jié)束才改變屬性TCSAFLUSH:清空輸入輸出緩沖區(qū)才改變屬性*ptr:指向termios結(jié)構(gòu)的指針函數(shù)返回值:成功返回0,失敗返回-1。編輯ppttcgetattrinttcgetattr〔intfd,*ptr〕該函數(shù)用來獲取終端控制屬性,它把串口的默認設置賦給了termios數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu),其參數(shù)說明如下:fd:待操作的文件描述符*ptr:指向termios結(jié)構(gòu)的指針函數(shù)返回值:成功返回0,失敗返回-1。編輯ppttcflushinttcflush〔intfd,intquene〕參數(shù)說明:quene取值及含義:*TCIFLUSH去除輸入隊列*TCOFLUSH去除輸出隊列*TCIOFLUSH去除輸入、輸出隊列舉例:tcflush〔fd,TCIOFLUSH〕;另加的說明:在翻開串口后,用戶其實已經(jīng)可以開始從串口讀取數(shù)據(jù)了,但如果用戶沒有讀取,數(shù)據(jù)將被將保存在緩沖區(qū)里。如果用戶不想要開始的一段數(shù)據(jù),或者發(fā)現(xiàn)緩沖區(qū)數(shù)據(jù)有誤,可以使用這個函數(shù)將緩沖區(qū)清空。應用舉例:tcflush(fd,TCIOFLUSH);sleep(2);read_len=read(fd,buff,10);編輯ppt終端速度控制cfgetispeed,cfgetospeed,cfsetispeed,cfsetospeed獲取和設置輸入、輸出速度函數(shù):intcfgetispeed(structtermios*tp);intcfsetispeed(structtermios*tp,speed_tspeed);intcfgetospeed(structtermios*tp);

intcfsetospeed(structtermios*tp,speed_tspeed);編輯ppt速度定義波特率的設置定義在<asm/termbits.h>例如B4800------

4800B9600------

9600B19200-----

19200B38400------

38400B57600------

57600B115200-----

115200編輯ppt速度設置舉例#include<stdio.h>//頭文件定義........structtermiosopt;/*定義指向termios結(jié)構(gòu)類型的指針opt*/

cfsetispeed(&opt,B9600);/*指定輸入波特率,9600bps*/cfsetospeed(&opt,B9600);/*指定輸出波特率,9600bps*/編輯ppt讀操作串口讀操作read()〔接收端〕用open函數(shù)翻開設備文件,函數(shù)返回一個文件描述符(filedescriptors,fd),通過文件描述符來訪問文件。函數(shù)原型如下:intread(intfd,*buffer,length);參數(shù)說明:〔1〕.intfd:文件描述符〔2〕.*buffer:數(shù)據(jù)緩沖區(qū)〔3〕.length:要讀取的字節(jié)數(shù)函數(shù)返回值:讀操作成功讀取返回讀取的字節(jié)數(shù),失敗那么返回-1。編輯ppt串口寫操作write()〔發(fā)送端〕函數(shù)原型如下:write(intfd,*buffer,length);參數(shù)說明:〔1〕.fd:文件描述符〔2〕.*buffer:存儲寫入數(shù)據(jù)的數(shù)據(jù)緩沖區(qū)〔3〕.length:寫入緩沖去的數(shù)據(jù)字節(jié)數(shù)函數(shù)返回值:成功返回寫入數(shù)據(jù)的字節(jié)數(shù),該值通常等于length,如果寫入失敗返回-1。寫操作編

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論