




已閱讀5頁,還剩5頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗指導書:串口通信實驗實驗目的:通過程序,理解并驗證串口通信的編程方法和機制。本次實驗分兩個環節,第一環節為用程序發送字符串,用linux命令在另一窗口直接從串口讀取;第二環節為用發送程序發送字符串,用接收程序在另一窗口讀取串口并顯示。要求必須完成第一環節,而第二環節為選作。本實驗在虛擬機環境下完成,利用虛擬機創建兩個虛擬串口,基于這兩個虛擬串口完成串口通信實驗。實驗內容:本次實驗需要在linux環境下,用vi工具輸入對應的程序,并編譯通過,運行后觀察結果是否正確。一、設置虛擬機串口1.1 VMware的串口:一個虛擬機最多可以添加四個虛擬串口,有如下3個方法配置虛擬串口:(1) 連接一個虛擬串口到宿主機的物理串口。(2) 連接一個虛擬串口到宿主機上的一個文件。(3) 在兩個虛擬機之間建立一個直接的連接,或者將虛擬機的串口與宿主機的應用程序連接。1.2 為虛擬機添加串口首先要保證虛擬機下的linux處于關機(power off)狀態,(1) 選擇菜單中的虛擬機設置(英文版為:VM - Settings),在硬件(Hardware)標簽頁中,如果已有串行端口(serial port),則選中該串口,并點選移除。(2) 點擊Add按鈕,在Add Hardware Wizard對話框中選擇Serial Port,點擊next,分兩次添加兩個串口,具體的選項如下圖:串口2的設置:注意兩個串口都使用了命名管道方式,但一個是服務器端,一個是客戶端。(3) 啟動linux操作系統,測試兩個串口是否設置成功在linux桌面空白處點擊右鍵,打開兩個終端窗口。在其中一個窗口(稱為窗口A)中,建立工作目錄,并進入該目錄。即,執行下述命令:1 cd /home2 mkdir src3 cd src4 cat /dev/ttyS1/注意是大寫的S在另一個窗口(稱為窗口B)執行下述命令:5 cd /home/src6 echo hello /dev/ttyS0/注意是大寫的S此時,應在窗口A中顯示出“hello”這個字符串,這表明窗口B通過串口/deb/ttyS0發送的字符串,通過串口連接,在窗口A的串口/dev/ttyS1上接收到了該字符串。在窗口A輸入Ctrl+c,可推出cat命令。環境設置完畢。可進入下面的代碼編輯、編譯、執行環節。二、僅創建串口發送程序,用在linux下用cat命令直接讀取串口該環節為用ttySend程序發送字符串,用linux的cat命令在另一窗口直接從串口讀取7 vi ttySend.c/創建ttySend.c文件,并輸入下述代碼ttySend.c:/* File Name: send.c* Description: send data to serial_Port* Date: */*頭文件定義*/#include #include #include #include #include #include #include #include #define max_buffer_size 100 /*定義緩沖區最大寬度*/*/int fd; /*定義設備文件描述符*/int flag_close;int open_serial(int k) if(k=0) /*串口選擇*/ fd = open(/dev/ttyS0,O_RDWR|O_NOCTTY); /*讀寫方式打開串口*/ perror(open /dev/ttyS0); else fd = open(/dev/ttyS1,O_RDWR|O_NOCTTY); perror(open /dev/ttyS1); if(fd = -1) /*打開失敗*/ return -1; else return 0;/*/int main(int argc, char *argv ) char sbuf=Hello,this is a Serial_Port test!n;/*待發送的內容,以n為結束標志*/ int sfd,retv,i; struct termios option; int length=sizeof(sbuf);/*發送緩沖區數據寬度*/*/ open_serial(0); /*打開串口1*/*/ printf(ready for sending data.n); /*準備開始發送數據*/ tcgetattr(fd,&option); cfmakeraw(&option);/*/ cfsetispeed(&option,B9600); /*波特率設置為9600bps*/ cfsetospeed(&option,B9600);/*/ tcsetattr(fd,TCSANOW,&option); retv=write(fd,sbuf,length); /*接收數據*/ if(retv=-1) perror(write); printf(the number of char sent is %dn,retv); flag_close = close(fd); if(flag_close = -1) /*判斷是否成功關閉文件*/ printf(Close the Device failur!n);輸入完畢后保存退出。執行命令:8 gcc -o ttySend ttySend.c /編譯,并指定生成文件為ttySend編譯成功后,再linux桌面空白處點擊右鍵,新建一個終端,執行下述命令:9 cat /dev/ttyS1/注意,是大寫的S,用于接收發送端發送的字符串然后切換回剛才的編譯窗口,執行下述命令:10 ./ttySend/發送字符串顯示如下:此時,在接收的終端窗口,應顯示如下:按ctrl+C可退出接收程序的等待循環三、ttySend程序發送,ttyReceive程序接收步驟一是用ttySend程序發送,用cat命令直接在另一個終端接收了串口的輸出。本步驟在步驟一的基礎上,用ttySend程序發送,用ttyReceive程序接收。在步驟一的接收窗口,按ctrl+C退出cat接收命令,并執行下述命令:11 cd /home/src/進入工作目錄12 vi ttyReceive.c/創建ttyReceive.c文件,并輸入下述代碼ttyReceive.c/* Filename:receive.c* Description:Receive data from Serial_Port* Date:*/*頭文件定義*/#include #include #include #include #include #include #include #include #include math.h#define max_buffer_size 100 /*定義緩沖區最大寬度*/*/int fd,s;int open_serial(int k) if(k=0) /*串口選擇*/ fd = open(/dev/ttyS0,O_RDWR|O_NOCTTY); /*讀寫方式打開串口*/ perror(open /dev/ttyS0); else fd = open(/dev/ttyS1,O_RDWR|O_NOCTTY); perror(open /dev/ttyS1); if(fd = -1) /*打開失敗*/ return -1; else return 0;/*/int main() char hdmax_buffer_size,*rbuf; /*定義接收緩沖區*/ int flag_close, retv,i,ncount=0; struct termios opt; int realdata=0;/*/ open_serial(1); /*打開串口1*/*/ tcgetattr(fd,&opt); cfmakeraw(&opt);/*/ cfsetispeed(&opt,B9600); /*波特率設置為9600bps*/ cfsetospeed(&opt,B9600);/*/ tcsetattr(fd,TCSANOW,&opt); rbuf=hd; /*數據保存*/ printf(ready for receiving data.n); retv=read(fd,rbuf,1); /*接收數據*/ if(retv=-1) printf(read error:%dn,retv); perror(read); /*讀狀態標志判斷*/ /*開始接收數據*/ while(*rbuf!=n) /*判斷數據是否接收完畢*/ ncount+=1; rbuf+; retv=read(fd,rbuf,1); if(retv=-1) printf(read error in whilen);perror(read); /*/ printf(The data received is:n); /*輸出接收到的數據*/ for(i=0;incount;i+) printf(%c,hdi); printf(n); flag_close =close(fd); if(flag_close = -1) /*判斷是否成功關閉文件*/ printf(Close the
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鐵路信號設備更新改造項目實施考核試卷
- 石棉水泥制品企業運營管理考核試卷
- 礦產勘查中的勘查設備維護與管理考核試卷
- 保健食品營養均衡發展策略實施效果考核試卷
- 安全監控在物流行業的應用案例分析考核試卷
- 異物卡喉急救處理指南
- 兒科急診常見疾病案例
- 口腔科院感防控與管理體系
- 蚊子傳播疾病機制與防控
- 麻醉質控總結報告
- 2025年上半年廣東汕尾市城區招聘政府聘員69人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025版MCN公司藝人合作簽約合同范本3篇
- 《玻璃體腔注射治療》課件
- GB/T 45098-2024營運純電動汽車換電服務技術要求
- 2025年中考英語話題作文范文20篇
- 政府經濟學-電大易考通考試題目答案 (一)
- 公交車駕駛員安全培訓
- 山西省云時代技術有限公司筆試題庫
- 龍鑫煤礦礦井概況-2
- 國際合作項目管理制度
- 上海市算力基礎設施發展報告2024年
評論
0/150
提交評論