实验9指导书:串口通信实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验指导书:串口通信实验

实验目的:

通过程序,理解并验证串口通信的编程方法和机制。

本次实验分两个环节,第一环节为用程序发送字符串,用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 /home

[2]mkdir src

[3]cd src

[4]cat /dev/ttyS1 //注意是大写的S

在另一个窗口(称为窗口B)执行下述命令:

[5]cd /home/src

[6]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);

相关文档
最新文档