实验9指导书:串口通信实验_第1页
实验9指导书:串口通信实验_第2页
实验9指导书:串口通信实验_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验指导书:串口通信实验实验目的:通过程序,理解并验证串口通信的编程方法和机制。本次实验分两个环节,第一环节为用程序发送字符串,用linux命令在另一窗口直接从串口读取;第二环节为用发送程序发送字符串,用接收程序在另一窗口读取串口并显示。要求必须完成第一环节,而第二环节为选作。本实验在虚拟机环境下完成,利用虚拟机创建两个虚拟串口,基于这两个虚拟串口完成串口通信实验。实验容:本次实验需要在linux环境下,用vi工具输入对应的程序,并编译通过,运行后观察结果是否正确。一、设置虚拟机串口1.1 VMware 的串口:一个虚拟机最多可以添加四个虚拟串口,有如下3个方法配置虚拟串口:(1) 连接一个虚

2、拟串口到宿主机的物理串口。(2) 连接一个虚拟串口到宿主机上的一个文件。(3) 在两个虚拟机之间建立一个直接的连接,或者将虚拟机的串口与宿主机的应用程序连接。1.2为虚拟机添加串口首先要保证虚拟机下的 linux处于关机(power off)状态,(1) 选择菜单中的虚拟机设置(英文版为:VM -> Settings),在硬件(Hardware)标签页中,如果已有串行端口( serial port),则选中该串口,并点选移除。(2) 点击 Add按钮,在 Add Hardware Wizard对话框中选择 Serial Port,点击next,分两次添加两个串口,具体的选项如下图:-i目

3、丑-內祁订慳卷:5CSI).CD;DVD :IDE)256 MBjSGB陰用文荐C:Vi-jgram F杷贡I'My记宀._.湖8伯动存总沿溜狀左V Eift(C)I工打硏电洒魅按8)tPDeTOm_l題行淇口條用曲呂連擾便用捌里出巧祸口山);自功检期阿紳文件:启劇山)*7朗显氏刘;y晁馆时制助師耳"u占用U)*初牌户叽娠咋珈在铠同櫃式本使恠傳 串打喘口何尸时梗胡瞞邱*串口 2的设置:注意两个串口都使用了命名管道方式,但一个是服务器端,一个是客户端。(3)启动linux操作系统,测试两个串口是否设置成功在linux桌面空白处点击右键,打开两个终端窗口。在其中一个窗口(称为窗口

4、 A)中,建立工作目录,并进入该目录。即,执行下述命令:1cd/home2mkdir src3cdsrc4cat/dev/ttyS1/注意是大写的S在另一个窗口(称为窗口 B )执行下述命令:5 cd /home/src6 echo hello >/dev/ttySO/注意是大写的 S此时,应在窗口 A中显示出“ hello”这个字符串,这表明窗口 B通过串口 /deb/ttySO发送的字符串,通过串口连接,在 窗口 A的串口 /dev/ttyS1上接收到了该字符串。在窗口 A输入Ctrl+c,可推出cat命令。环境设置完毕。可进入下面的代码编辑、编译、执行环节。二、仅创建串口发送程序,

5、用在linux下用cat命令直接读取串口该环节为用ttySend程序发送字符串,用linux的cat命令在另一窗口直接从串口读取7 vi ttySe nd.c/创建ttySend.c文件,并输入下述代码ttySe nd.c:* File Name :send.c* Description :send data to serial_Port* Date :*/*头文彳牛定义 *#i nclude <stdio.h>#in clude <stri ng.h>#in clude <malloc.h>#in clude <sys/types.h> #i

6、nclude <sys/stat.h> #in clude <fcn tl.h>#in clude <uni std.h>100/*定义缓冲区最大宽度*/#in clude <termios.h>#defi ne max_buffer_size/*/int fd; /*定义设备文件描述符*/int flag_close;int ope n_serial( int k)if(k=O)/* 串 口选择 */fd = ope n( ”/dev/ttyS0",O_RDWR|O_NOCTTY);/* 读写方式打开串口 */perror("

7、;open /dev/ttySO");elsefd = ope n( ”/dev/ttyS1",O_RDWR|O_NOCTTY); perror("open /dev/ttyS1");if(fd = -1)/* 打开失败 */return -1;elsereturn 0;* int main (i nt argc, char *argv)char sbuf="Hello,this is a Serial_Port test!n"/*待发送的容,以 n 为结束标志 */int sfd,retv,i;struct termios opti

8、o n;int length=sizeof(sbuf);/*发送缓冲区数据宽度 */*Iopen_serial(0);/* 打开串口 1*/*printf("ready for sending data.n"); /* 准备开始发送数据 */tcgetattr(fd,& opti on);cfmakeraw(&opti on);/*/cfsetispeed(&option,B9600); /* 波特率设置为 9600bps*/cfsetospeed(&opti on ,B9600);/*/tcsetattr(fd,TCSANOW,&o

9、ptio n);retv=write(fd,sbuf,length);/* 接收数据 */if(retv=-1)perror("write");prin tf("the nu mber 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 /编译,并指定生成文件为ttySe

10、nd编译成功后,再linux桌面空白处点击右键,新建一个终端,执行下述命令:9 cat /dev/ttyS1注意,是大写的 S,用于接收发送端发送的字符串然后切换回刚才的编译窗口,执行下述命令:10 ./ttySend/发送字符串显示如下:mot(*localhost ttySendRcul# .ztty_seiid open <deu/ttyS0: Slice:ess ready for sending data.-.the number of cliar sent is 35此时,在接收的终端窗口,应显示如下:CraotBlo匚ttySendlicLi tt cat /deuztty

11、Sl He!lOfthis is a Ser-ial_Port test按ctrl+C可退出接收程序的等待循环ttySend程序发送,ttyReceive程序接收步骤一是用ttySe nd程序发送,用cat命令直接在另一个终端接收了串口的输出。一的基础上,用ttySend程序发送,用ttyReceive程序接收。在步骤一的接收窗口,按ctrl+C退出cat接收命令,并执行下述命令:本步骤在步骤11 cd /home/src进入工作目录12 vi ttyReceive.c/创建ttyReceive.c文件,并输入下述代码ttyReceive.c嗫* File name : receive.c*

12、Description : Receive data from Serial_Port* Date :*/*#i nclude <stdio.h>#in clude <stri ng.h>#in clude <malloc.h>#in clude <sys/types.h> #i nclude <sys/stat.h> #in clude <fcn tl.h>#in clude <uni std.h>#in clude <termios.h>头文件定义*/#i nclude "math.h

13、"#defi ne max_buffer_size 100/* 定义缓冲区最大宽度 */*/ int fd,s;int ope n_serial( int k)if(k=O)/* 串 口选择 */fd = ope n( ”/dev/ttyS0",O_RDWR|O_NOCTTY);/* 读写方式打开串口 */perror("open /dev/ttySO");elsefd = ope n( ”/dev/ttyS1",O_RDWR|O_NOCTTY); perror("open /dev/ttyS1");if(fd = -1)/

14、* 打开失败 */return -1;elsereturn 0; int mai n()*char hdmax_buffer_size,*rbuf; /* 定义接收缓冲区 */ int flag_close, retv,i, ncoun t=0;struct termios opt;int realdata=0;/* open_serial(1); /* 打开串口 1*/*tcgetattr(fd, &opt);cfmakeraw(&opt);*cfsetispeed(&opt,B9600); /* 波特率设置为 9600bps*/cfsetospeed(&op

15、t,B9600);*tcsetattr(fd,TCSANOW,&opt);rbuf=hd; /*数据保存*/prin tf("ready for receivi ng data.' n");retv=read(fd,rbuf,1); /* 接收数据 */ if(retv=-1)prin tf("read error:%dn",retv);perror("read"); /*读状态标志判断*/ ¥*while(*rbuf!='n')ncoun t+=1; rbuf+;开始接收数据*/*判断数据是

16、否接收完毕*/retv=read(fd,rbuf,1);if(retv=-1)prin tf("read error in while'n"); perror("read");*prin tf("The data received is:n");/* 输出接收到的数据 */for(i=0;i< ncoun t;i+) prin tf("%c",hdi);prin tf("n");flag_close =close(fd);if(flag_close = -1)/*判断是否成功关闭文件 */printf("Close the Device failur ! n");输入完毕后保存退出。执行命令:13 gcc -o ttyReceive ttyReceive.c /编译,指定输出为 ttyReceive14 ./ttyReceive/执行接收程序,等待发送窗口发送字符串在步骤一的ttySend窗口,执行下述命令:15 ./ttySend/编译,需指定 pthread 库在发送窗口显示如下:rootO loca Host ttySendftcu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论