linux下串口程序实例.docx
文本预览下载声明
#include
stdio.h
/*标准输入输出定义*/
#include
stdlib.h
/*标准函数库定义*/
#include
unistd.h
/*Unix 标准函数定义*/
#include
sys/types.h
/**/
#include
sys/stat.h
/**/
#include
fcntl.h
/*文件控制定义*/
#include
termios.h
/*PPSIX 终端控制定义*/
#include
errno.h
/*错误号定义*/
/***@brief
设置串口通信速率
*@param
fd
类型 int
打开串口的文件句柄
*@param
speed 类型 int
串口速度
*@return
void*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, Opt);
for ( i= 0; i sizeof(speed_arr) / sizeof(int); i++)
{
if (speed == name_arr[i])
{
tcflush(fd, TCIOFLUSH); cfsetispeed(Opt, speed_arr[i]); cfsetospeed(Opt, speed_arr[i]); status = tcsetattr(fd, TCSANOW, Opt); if (status != 0)
perror(tcsetattr fd1);
return;
}
tcflush(fd,TCIOFLUSH);
}
}
/**
*@brief
设置串口数据位,停止位和效验位
*@param
fd类型
int 打开的串口文件句柄*
*@param
databits 类型
int 数据位
取值 为 7
或者 8*
*@param
stopbits 类型
int 停止位
取值为 1
或者 2*
*@param
parity
类型
int
效验类型 取值为 N,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{
if
struct termios options; ( tcgetattr( fd,options)
!=
0)
{
perror(SetupSerial 1);
return(FALSE);
}
options.c_cflag = ~CSIZE;
switch (databits) /*设置数据位数*/
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,Unsupported data size\n); return (FALSE);
}
switch (parity)
{
case n:
case N:
options.c_cflag = ~PARENB;
options.c_iflag = ~INPCK;
/* Clear parity enable */ /* Enable parity checking
*/
break;
case o:
case O:
options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验
*/
options.c_iflag |= INPCK;
/* Disnable
parity checking */
break;
case e:
case E:
options.c_cflag |= PARENB; options.c_cflag = ~PARODD; options.c_iflag |= INPCK;
/* Enable parity */
/* 转换为偶效验*/
/* Disnable parity
checking */
break;
case S:
case s: /*as no parity*/
options.c_cflag =
显示全部