




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1/30,Linux下串口程序設(shè)計(jì),2,嵌入式系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)二,實(shí)驗(yàn)時(shí)間 1班10月27日 19:00 21:25 2班10月28日 08:00 10:25 實(shí)驗(yàn)內(nèi)容 串行端口程序設(shè)計(jì)(2.3必做,并提交實(shí)驗(yàn)報(bào)告) 第二章 其他實(shí)驗(yàn)(選做) 實(shí)驗(yàn)報(bào)告提交 時(shí)間:下周實(shí)驗(yàn)之前 提交方式: 發(fā)送到郵箱: (1班), (2班), 文件命名:學(xué)號(hào)+姓名+實(shí)驗(yàn)二.doc 郵件主題:嵌入式系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)二,3,串行端口程序設(shè)計(jì),實(shí)驗(yàn)步驟 1.閱讀理解源碼 源碼位置:expbasic03_tty 閱讀源碼方法 Linux下使用vi編輯器(Linux、VI常用命令參考實(shí)驗(yàn)指導(dǎo)書第七章附錄7.1、7.2) wind
2、ows下使用SourceInsight軟件 2.編譯應(yīng)用程序,4,串行端口程序設(shè)計(jì),實(shí)驗(yàn)步驟 3.下載調(diào)試 切換到minicom 終端窗口,使用NFS mount 開發(fā)主機(jī)的/arm2410s 到/host 目錄:mount t nfs o nolock 34:/arm2410s /host 開發(fā)板中串口設(shè)備位于/dev/tts/下,沒有ttyS0這個(gè)設(shè)備,所以需要建立一個(gè)連接,方法如下: cd /dev ln sf /dev/tts/0 ttyS0 進(jìn)入expbasic03_tty 目錄,運(yùn)行term,觀察運(yùn)行結(jié)果的正確性。,實(shí)驗(yàn)?zāi)康? 了解在 linux 環(huán)境下串行程
3、序設(shè)計(jì)的基本方法。 掌握終端的主要屬性及設(shè)置方法,熟悉終端 I /O 函數(shù)的使用。 學(xué)習(xí)使用多線程來完成串口的收發(fā)處理。,5/30,實(shí)驗(yàn)原理與程序分析,Linux 對(duì)所有各類設(shè)備文件的輸入輸出操作,看上去就像對(duì)普通文件的輸入輸出一樣,所以Linux 對(duì)串口的操作,也是通過設(shè)備文件訪問的。為了訪問串口,只需要打開相應(yīng)的設(shè)備文件即可。 默認(rèn)地,在Linux 下,串行口COM1 和COM2對(duì)應(yīng)的設(shè)備分別為/dev/ttyS0 和/dev/ttyS1。,串口詳細(xì)配置,在使用串口之前必須設(shè)置相關(guān)配置,包括:波特率、數(shù)據(jù)位、校驗(yàn)碼、停止位等。串口設(shè)置由下面結(jié)構(gòu)體實(shí)現(xiàn): struct termios tcf
4、lag_t c_iflag; /* 輸入模式 */ tcflag_t c_oflag; /* 輸出模式 */ tcflag_t c_cflag; /* 控制模式 */ tcflag_t c_lflag; /* 本地模式 */ cc_t c_ccNCCS; /* 控制字符 */ 在 中.,8,串行端口程序設(shè)計(jì),c_iflag 輸入模式標(biāo)志,控制終端輸入方式,具體參數(shù)如下表所示。,9,串行端口程序設(shè)計(jì),c_oflag 輸出模式標(biāo)志,控制終端輸出方式,具體參數(shù)如表6.4所示。,10,串行端口程序設(shè)計(jì),c_cflag 控制模式標(biāo)志,指定終端硬件控制信息,具體參數(shù)如下表所示。,11,串行端口程序設(shè)計(jì),c
5、_lflag 本地模式標(biāo)志,控制終端編輯功能,具體參數(shù)如下表所示。,12,串行端口程序設(shè)計(jì),c_ccNCCS 控制字符,用于保存終端驅(qū)動(dòng)程序中的特殊字符,如輸入結(jié)束符等。c_cc中定義了如表6.7所示的控制字符。,串口控制函數(shù),t c g e t a t t r 取屬性( t e r m i o s結(jié)構(gòu)) t c s e t a t t r 設(shè)置屬性( t e r m i o s結(jié)構(gòu)) c f g e t i s p e e d 得到輸入速度 c f g e t o s p e e d 得到輸出速度 c f s e t i s p e e d 設(shè)置輸入速度 c f s e t o s p e
6、e d 設(shè)置輸出速度 t c d r a i n 等待所有輸出都被傳輸 t c f l o w 掛起傳輸或接收 t c f l u s h 刷清未決輸入和/或輸出 t c s e n d b r e a k 送B R E A K字符 t c g e t p g r p 得到前臺(tái)進(jìn)程組I D t c s e t p g r p 設(shè)置前臺(tái)進(jìn)程組I D,打開串口,1、打開串口是通過使用標(biāo)準(zhǔn)的文件打開函數(shù)操作: int fd; /*以讀寫方式打開串口*/ fd = open( /dev/ttyS0, O_RDWR); if (-1 = fd) /* 不能打開串口一*/ perror( 提示錯(cuò)誤!);
7、,14/30,#include int open(const char *pathname, int oflag) 返回值:成功則返回文件描述符,否則返回 -1 對(duì)于 open 函數(shù)來說,第三個(gè)參數(shù)(.)僅當(dāng)創(chuàng)建新文件時(shí)才使用,用于指定文件的訪問權(quán)限位(access permission bits)。 pathname 是待打開/創(chuàng)建文件的路徑名(如 C:/cpp/a.cpp); oflag 用于指定文件的打開/創(chuàng)建模式,這個(gè)參數(shù)可由以下常量(定義于 fcntl.h)通過邏輯或構(gòu)成。 O_RDONLY 只讀模式 O_WRONLY 只寫模式 O_RDWR 讀寫模式,15/30,打開串口,設(shè)置串口
8、,所有對(duì)串口的操作都是通過結(jié)構(gòu)體 struct termios和幾個(gè)函數(shù)實(shí)現(xiàn)的,其中兩個(gè)最常用的函數(shù)是tcgetattr()和tcsetattr() 幾乎在所有情況下,程序都是通過tcgetattr()函數(shù)獲取設(shè)備當(dāng)前的設(shè)置,然后修改這些設(shè)置,最后用tcsetattr()使這些設(shè)置生效。 許多程序會(huì)保存終端初始的設(shè)置并在終止運(yùn)行前恢復(fù)這些設(shè)置。,16/30,保存串口當(dāng)前狀態(tài),2、保存原先串口配置使用tcgetattr(fd, /* save current modem settings */,17/30,設(shè)置串口,最基本的設(shè)置串口包括波特率設(shè)置,效驗(yàn)位和停止位設(shè)置。 串口的設(shè)置主要是設(shè)置 st
9、ruct termios結(jié)構(gòu)體的各成員值。,18/30,設(shè)置串口,例子: struct termios newtio,newstdtio; newtio.c_cflag = CLOCAL | CREAD; /*ctrol flag*/ newtio.c_ccVMIN=1; newtio.c_ccVTIME=0;,19/30,設(shè)置串口,3、激活配置: int tcsetattr (int fd, int options ,struct termios *t) 用來將termios結(jié)構(gòu)指針t內(nèi)的設(shè)置值賦給當(dāng)前用文件描述符fd表示的設(shè)備終端 參數(shù)options決定什么時(shí)候改變才生效 TCSANOW修
10、改立即生效 TCSADRAIN所有已經(jīng)發(fā)送的輸出寫入fd后生效 TCSAFLUSH輸出隊(duì)列為空時(shí)生效,20/30,設(shè)置串口,4、處理要寫入的數(shù)據(jù)對(duì)象: tcflush()函數(shù) tcflush函數(shù)刷清(拋棄)輸入緩存(終端驅(qū)動(dòng)程序已收到,但用戶程序尚未讀)或輸出緩存(用戶程序已經(jīng)寫,但尚未發(fā)送)。 原型為:int tcflush(int fd ,int queue_selector) queue_selector數(shù)應(yīng)當(dāng)是下列三個(gè)數(shù)之一: TCIFLUSH丟棄驅(qū)動(dòng)上已經(jīng)接收到但還沒讀入的所有數(shù)據(jù) TCOFLUSH丟棄所有已經(jīng)寫入驅(qū)動(dòng)但還沒發(fā)送的數(shù)據(jù) TCIOFLUSH丟棄所有輸入輸出隊(duì)列上還沒有讀
11、取或發(fā)送的數(shù)據(jù),21/30,tcflush(fd,TCIFLUSH);,讀寫串口,5、設(shè)置好串口之后,讀寫串口就很容易了,可以把串口當(dāng)作文件讀寫 發(fā)送數(shù)據(jù): char buffer1024; int Length1024; int nByte; nByte = write(fd, buffer ,Length),22/30,讀取串口數(shù)據(jù),使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(Raw Mode)傳輸數(shù)據(jù),那么read函數(shù)返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。 char buff1024; int Len1024; int readByte = read(fd, buff, Len);,
12、23/30,關(guān)閉串口,6、關(guān)閉串口 close() 例如: tcsetattr(fd,TCSANOW,24/30,提示,注意:如果在執(zhí)行./term 時(shí)出現(xiàn)下面的錯(cuò)誤,可以通過我們前文提到的方法建立一個(gè)連接來解決。 /mnt/yaffs cd /dev /dev ln sf /dev/tts/0 ttyS0,25/30,26,1波特率設(shè)置 獲得端口波特率信息是通過cfgetispeed函數(shù)和cfgetospeed函數(shù)來實(shí)現(xiàn)的。cfgetispeed函數(shù)用于獲得結(jié)構(gòu)體termios_p中的輸入波特率信息,而cfgetospeed函數(shù)用于獲得結(jié)構(gòu)體termios_p中的輸出波特率信息。這兩個(gè)函數(shù)的
13、具體信息如下表所示。,其他串口設(shè)置參考,27,1波特率設(shè)置 cfsetispeed函數(shù)和cfsetospeed函數(shù)會(huì)修改結(jié)構(gòu)體termios_p中的波特率信息,其中參數(shù)speed可以使用下表中所列出的宏。 speed參數(shù)常用波特率信息,其他串口設(shè)置參考,28,2數(shù)據(jù)位 數(shù)據(jù)位指的是每字節(jié)中實(shí)際數(shù)據(jù)所占的比特?cái)?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ù)位時(shí),必須先使用CSIZE做位屏蔽。Eg:,struct termios opt; /*定義指向termios 結(jié)構(gòu)類型的指針opt*/獲得串口指向termios結(jié)構(gòu)的指針tcgetattr(fd, ,其他串口設(shè)置參考,29,3奇偶校驗(yàn)位 奇偶校驗(yàn)可以選擇偶校驗(yàn)、奇校驗(yàn)、空格等方式,也可以不使用校驗(yàn)。如果要設(shè)置為偶校驗(yàn)的話,首先要將termios結(jié)構(gòu)體中c_cflag設(shè)置PARENB標(biāo)志,并清除PARODD標(biāo)志。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙江省建筑安全員《B證》考試題庫
- 《公共政策學(xué)》題庫及答案 2
- 西安信息職業(yè)大學(xué)《商業(yè)倫理》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年山東省聊城市高唐縣第二中學(xué)高三上學(xué)期12月月考?xì)v史試卷
- 武漢船舶職業(yè)技術(shù)學(xué)院《R語言與數(shù)據(jù)可視化》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南財(cái)經(jīng)工業(yè)職業(yè)技術(shù)學(xué)院《斜視弱視學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025青海省安全員《C證》考試題庫
- 濰坊理工學(xué)院《經(jīng)濟(jì)統(tǒng)計(jì)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨夏現(xiàn)代職業(yè)學(xué)院《數(shù)字信號(hào)處理A》2023-2024學(xué)年第二學(xué)期期末試卷
- 平頂山學(xué)院《安全類專業(yè)寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊(cè)電子教案
- 心理評(píng)估與診斷簡介
- 無痛病房管理課件
- 讓孩子變成學(xué)習(xí)的天使——由《第56號(hào)教室的奇跡》讀書分享
- 球泡檢驗(yàn)標(biāo)準(zhǔn)
- 公安筆錄模板之詢問嫌疑人(書面?zhèn)鲉局伟舶讣?
- 振動(dòng)分析基礎(chǔ)講義1
- 記賬憑證匯總表excel模板
- 鄧麗君經(jīng)典歌曲30首簡譜(共33頁)
- 故障診斷技術(shù)的國內(nèi)外發(fā)展現(xiàn)狀(共3頁)
- 園林綠化施工通用表格模板
評(píng)論
0/150
提交評(píng)論