版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)指導(dǎo)書:串口通信實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模和ㄟ^程序,理解并驗(yàn)證串口通信的編程方法和機(jī)制。本次實(shí)驗(yàn)分兩個環(huán)節(jié),第一環(huán)節(jié)為用程序發(fā)送字符串,用linux命令在另一窗口直接從串口讀取;第二環(huán)節(jié)為用發(fā)送程序發(fā)送字符串,用接收程序在另一窗口讀取串口并顯示。要求必須完成第一環(huán)節(jié),而第二環(huán)節(jié)為選作。本實(shí)驗(yàn)在虛擬機(jī)環(huán)境下完成,利用虛擬機(jī)創(chuàng)建兩個虛擬串口,基于這兩個虛擬串口完成串口通信實(shí)驗(yàn)。實(shí)驗(yàn)內(nèi)容:本次實(shí)驗(yàn)需要在linux環(huán)境下,用vi工具輸入對應(yīng)的程序,并編譯通過,運(yùn)行后觀察結(jié)果是否正確。一、設(shè)置虛擬機(jī)串口1.1 VMware的串口:一個虛擬機(jī)最多可以添加四個虛擬串口,有如下3個方法配置虛擬串口:(1) 連接一個虛
2、擬串口到宿主機(jī)的物理串口。(2) 連接一個虛擬串口到宿主機(jī)上的一個文件。(3) 在兩個虛擬機(jī)之間建立一個直接的連接,或者將虛擬機(jī)的串口與宿主機(jī)的應(yīng)用程序連接。1.2 為虛擬機(jī)添加串口首先要保證虛擬機(jī)下的linux處于關(guān)機(jī)(power off)狀態(tài),(1) 選擇菜單中的虛擬機(jī)à設(shè)置(英文版為:VM -> Settings),在硬件(Hardware)標(biāo)簽頁中,如果已有串行端口(serial port),則選中該串口,并點(diǎn)選移除。(2) 點(diǎn)擊Add按鈕,在Add Hardware Wizard對話框中選擇Serial Port,點(diǎn)擊next,分兩次添加兩個串口,具體的選項(xiàng)如下圖:串
3、口2的設(shè)置:注意兩個串口都使用了命名管道方式,但一個是服務(wù)器端,一個是客戶端。(3) 啟動linux操作系統(tǒng),測試兩個串口是否設(shè)置成功在linux桌面空白處點(diǎn)擊右鍵,打開兩個終端窗口。在其中一個窗口(稱為窗口A)中,建立工作目錄,并進(jìn)入該目錄。即,執(zhí)行下述命令:1 cd /home2 mkdir src3 cd src4 cat /dev/ttyS1/注意是大寫的S在另一個窗口(稱為窗口B)執(zhí)行下述命令:5 cd /home/src6 echo hello >/dev/ttyS0/注意是大寫的S此時,應(yīng)在窗口A中顯示出“hello”這個字符串,這表明窗口B通過串口/deb/ttyS0發(fā)送
4、的字符串,通過串口連接,在窗口A的串口/dev/ttyS1上接收到了該字符串。在窗口A輸入Ctrl+c,可推出cat命令。環(huán)境設(shè)置完畢。可進(jìn)入下面的代碼編輯、編譯、執(zhí)行環(huán)節(jié)。二、僅創(chuàng)建串口發(fā)送程序,用在linux下用cat命令直接讀取串口該環(huán)節(jié)為用ttySend程序發(fā)送字符串,用linux的cat命令在另一窗口直接從串口讀取7 vi ttySend.c/創(chuàng)建ttySend.c文件,并輸入下述代碼ttySend.c:/* File Name: send.c* Description: send data to serial_Port* Date: */*頭文件定義*/#include <s
5、tdio.h>#include <string.h>#include <malloc.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <termios.h>#define max_buffer_size 100 /*定義緩沖區(qū)最大寬度*/*/int fd; /*定義設(shè)備文件描述符*/int flag_close;int open_serial(int k) if(k=0)
6、/*串口選擇*/ 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="
7、Hello,this is a Serial_Port test!n"/*待發(fā)送的內(nèi)容,以n為結(jié)束標(biāo)志*/ int sfd,retv,i; struct termios option; int length=sizeof(sbuf);/*發(fā)送緩沖區(qū)數(shù)據(jù)寬度*/*/ open_serial(0); /*打開串口1*/*/ printf("ready for sending data.n"); /*準(zhǔn)備開始發(fā)送數(shù)據(jù)*/ tcgetattr(fd,&option); cfmakeraw(&option);/*/ cfsetispeed(&opti
8、on,B9600); /*波特率設(shè)置為9600bps*/ cfsetospeed(&option,B9600);/*/ tcsetattr(fd,TCSANOW,&option); retv=write(fd,sbuf,length); /*接收數(shù)據(jù)*/ if(retv=-1) perror("write"); printf("the number of char sent is %dn",retv); flag_close = close(fd); if(flag_close = -1) /*判斷是否成功關(guān)閉文件*/ printf(&q
9、uot;Close the Device failur!n");輸入完畢后保存退出。執(zhí)行命令:8 gcc -o ttySend ttySend.c /編譯,并指定生成文件為ttySend編譯成功后,再linux桌面空白處點(diǎn)擊右鍵,新建一個終端,執(zhí)行下述命令:9 cat /dev/ttyS1/注意,是大寫的S,用于接收發(fā)送端發(fā)送的字符串然后切換回剛才的編譯窗口,執(zhí)行下述命令:10 ./ttySend/發(fā)送字符串顯示如下:此時,在接收的終端窗口,應(yīng)顯示如下:按ctrl+C可退出接收程序的等待循環(huán)三、ttySend程序發(fā)送,ttyReceive程序接收步驟一是用ttySend程序發(fā)送,用c
10、at命令直接在另一個終端接收了串口的輸出。本步驟在步驟一的基礎(chǔ)上,用ttySend程序發(fā)送,用ttyReceive程序接收。在步驟一的接收窗口,按ctrl+C退出cat接收命令,并執(zhí)行下述命令:11 cd /home/src/進(jìn)入工作目錄12 vi ttyReceive.c/創(chuàng)建ttyReceive.c文件,并輸入下述代碼ttyReceive.c/* Filename:receive.c* Description:Receive data from Serial_Port* Date:*/*頭文件定義*/#include <stdio.h>#include <string.h
11、>#include <malloc.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <termios.h>#include "math.h"#define max_buffer_size 100 /*定義緩沖區(qū)最大寬度*/*/int fd,s;int open_serial(int k) if(k=0) /*串口選擇*/ fd = open("/dev/t
12、tyS0",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; /*定義接收緩沖區(qū)*/ int flag_close, retv,i,nco
13、unt=0; struct termios opt; int realdata=0;/*/ open_serial(1); /*打開串口1*/*/ tcgetattr(fd,&opt); cfmakeraw(&opt);/*/ cfsetispeed(&opt,B9600); /*波特率設(shè)置為9600bps*/ cfsetospeed(&opt,B9600);/*/ tcsetattr(fd,TCSANOW,&opt); rbuf=hd; /*數(shù)據(jù)保存*/ printf("ready for receiving data.n"); r
14、etv=read(fd,rbuf,1); /*接收數(shù)據(jù)*/ if(retv=-1) printf("read error:%dn",retv); perror("read"); /*讀狀態(tài)標(biāo)志判斷*/ /*開始接收數(shù)據(jù)*/ while(*rbuf!='n') /*判斷數(shù)據(jù)是否接收完畢*/ ncount+=1; rbuf+; retv=read(fd,rbuf,1); if(retv=-1) printf("read error in whilen");perror("read"); /*/ printf("The data received is:n"); /*輸出接收到的數(shù)據(jù)*/ for(i=0;i<ncount;i+) printf("%c",hdi); printf("n"); flag_close =close(fd); if(flag_close = -1) /*判斷是否成功關(guān)閉文件*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國電子用高純化學(xué)品市場規(guī)?,F(xiàn)狀及前景動態(tài)分析報告2024-2030年
- 吉林省雙遼市八年級地理下冊 7.2“魚米之鄉(xiāng)”-長江三角洲地區(qū)教案 (新版)新人教版
- 2024年二建【水利】第一階段備考規(guī)劃
- Unit 3 Careers and skills Integrated Skills 詳解教學(xué)設(shè)計 -2023-2024學(xué)年高中英語牛津譯林版(2020)選擇性必修第四冊
- 《教室有多長》(教案)-2024-2025學(xué)年二年級上冊數(shù)學(xué)北師大版
- 2025年江蘇省靖江市劉國鈞中學(xué)高三4月期中考試生物試題含解析
- 2025年吉林省吉林市吉化一中高三生物試題綜合練習(xí)(四)含附加題含解析
- 2025年湖南省長望瀏寧四縣聯(lián)盟測試生物試題含解析
- 2024屆安徽省宣城市第十三中學(xué)高三下學(xué)期模擬(二)測試數(shù)學(xué)試題
- 2025年廣東省佛山市南海中學(xué)高三下學(xué)期最后一次模擬考試試卷生物試題含解析
- 銀行供應(yīng)鏈融資行業(yè)調(diào)研及投資前景分析報告
- 福建省廈門市海滄區(qū)廈門雙十中學(xué)海滄附屬學(xué)校2024-2025學(xué)年七年級上學(xué)期第一次月考數(shù)學(xué)試題(無答案)
- 19 小小氣象站(一)制作風(fēng)向儀 教學(xué)設(shè)計-2023-2024學(xué)年科學(xué)三年級下冊冀人版
- 小竅門大搜索(教學(xué)設(shè)計)-2024-2025 學(xué)年六年級上冊綜合實(shí)踐活動教科版
- 國開2024年秋《機(jī)電控制工程基礎(chǔ)》形考任務(wù)2答案
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗(yàn)人員理論考試題及答案
- NY∕T 3349-2021 畜禽屠宰加工人員崗位技能要求
- 產(chǎn)后抑郁癥知識講座共36張課件
- (最新整理)勞保發(fā)放登記臺賬
- 過去進(jìn)行時練習(xí)題(含答案)
- 高一作文雜文媽媽我親愛的媽媽600字
評論
0/150
提交評論