实验5 多路复用式串口操作

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

南昌大学实验报告

学生姓名:王维学号:6100212202专业班级:网工121班

实验类型:□验证□综合□设计□创新实验日期:4/2实验成绩:

一、实验项目名称

实验5:多路复用式串口操作

二、实验项目名称

通过编写多路复用式串口读写,进一步理解多路复用函数的用法,同时更加熟练掌握Linux 设备文件的读写方法。

三、实验内容

本实验主要实现两台机器(宿主机和目标机)之间的串口通信,每台机器都可以发送和接收数据。除了串口设备名称不同(宿主机上使用串口1:/dev/ttyS1,而在目标机上使用串口2:/dev/ttyS2),两台机器上的程序基本相同。

四、实验步骤

(1)流程图两台机器上的程序使用同样的流程图。

(2)编写代码

/* uart_api.h */

#ifndef UART_API_H

#define UART_API_H

#define GNR_COM 0

#define USB_COM 1

#define COM_TYPE GNR_COM

#define MAX_COM_NUM 3

#define HOST_COM_PORT 1

#define TARGET_COM_PORT 2

#define BUFFER_SIZE 1024

#define TIME_DELAY 180

#define SEL_FILE_NUM 2

#define RECV_FILE_NAME "recv.dat"

int open_port(int com_port);

int set_com_config(int fd,int baud_rate, int data_bits, char parity, int stop_bits); #endif /* UART_API_H */

/* uart_api.c */

#include

#include

#include

#include

#include

#include

#include

#include "uart_api.h"

/*打开串口函数*/

int open_port(int com_port)

{

int fd;

#if (COM_TYPE == GNR_COM)

char *dev[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2"};

#else

char *dev[] = {"/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2"};

#endif

if ((com_port < 0) || (com_port > MAX_COM_NUM))

{

return -1;

}

fd = open(dev[com_port - 1], O_RDWR|O_NOCTTY|O_NDELAY);

if (fd < 0)

{

perror("open serial port");

return(-1);

}

/*恢复串口为阻塞状态*/

if (fcntl(fd, F_SETFL, 0) < 0)

{

perror("fcntl F_SETFL\n");

}

/*测试是否为终端设备*/

if (isatty(STDIN_FILENO) == 0)

{

perror("standard input is not a terminal device");

}

return fd;

}

int set_com_config(int fd,int baud_rate, int data_bits, char parity, int stop_bits)

{

struct termios new_cfg,old_cfg;

int speed;

/*保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息*/ if (tcgetattr(fd, &old_cfg) != 0)

{

perror("tcgetattr");

return -1;

}

/*步骤一,设置字符大小*/

new_cfg = old_cfg;

cfmakeraw(&new_cfg);

new_cfg.c_cflag &= ~CSIZE;

/*设置波特率*/

switch (baud_rate)

{

case 2400:

{

speed = B2400;

}

break;

case 4800:

{

speed = B4800;

}

break;

case 9600:

{

speed = B9600;

}

break;

case 19200:

{

speed = B19200;

}

break;

case 38400:

{

speed = B38400;

}

相关文档
最新文档