LINUX 串口通讯源码.doc_第1页
LINUX 串口通讯源码.doc_第2页
LINUX 串口通讯源码.doc_第3页
LINUX 串口通讯源码.doc_第4页
LINUX 串口通讯源码.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

主要函数int openport(char *Dev) /打开串口int setport(int fd, int baud,int databits,int stopbits,int parity)/设置串口,波特率,数据位,停止位,校验int readport(int fd,char *buf,int len,int maxwaittime)/读数据,参数为串口,BUF,长度,超时时间int writeport(int fd,char *buf,int len)/发送数据void clearport(int fd)/如果出现数据与规约不符合,可以调用这个函数来刷新串口读写数据如果有BUG,请大家及时回复给我,EMAIL:41063473QQ.COM。#include #include #include #include #include #include #include int openport(char *Dev)intfd = open( Dev, O_RDWR|O_NOCTTY|O_NDELAY );if (-1 = fd) perror(Cant Open Serial Port);return -1;elsereturn fd;int setport(int fd, int baud,int databits,int stopbits,int parity)int baudrate;struct termios newtio;switch(baud)case 300:baudrate=B300;break;case 600:baudrate=B600;break;case 1200:baudrate=B1200;break;case 2400:baudrate=B2400;break;case 4800:baudrate=B4800;break;case 9600:baudrate=B9600;break;case 19200:baudrate=B19200;break;case 38400:baudrate=B38400;break;default :baudrate=B9600;break;tcgetattr(fd,&newtio);bzero(&newtio,sizeof(newtio); /setting c_cflagnewtio.c_cflag &=CSIZE;switch (databits) /*设置数据位数*/case 7:newtio.c_cflag |= CS7; /7位数据位break;case 8:newtio.c_cflag |= CS8; /8位数据位break;default:newtio.c_cflag |= CS8;break; switch (parity) /设置校验case n:case N:newtio.c_cflag &= PARENB; /* Clear parity enable */newtio.c_iflag &= INPCK; /* Enable parity checking */break;case o:case O:newtio.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/newtio.c_iflag |= INPCK; /* Disnable parity checking */break;case e:case E:newtio.c_cflag |= PARENB; /* Enable parity */newtio.c_cflag &= PARODD; /* 转换为偶效验*/newtio.c_iflag |= INPCK; /* Disnable parity checking */break;case S:case s: /*as no parity*/ newtio.c_cflag &= PARENB;newtio.c_cflag &= CSTOPB;break;default:newtio.c_cflag &= PARENB; /* Clear parity enable */newtio.c_iflag &= INPCK; /* Enable parity checking */break; switch (stopbits)/设置停止位case 1:newtio.c_cflag &= CSTOPB; /1break;case 2:newtio.c_cflag |= CSTOPB; /2 break;default:newtio.c_cflag &= CSTOPB;break;newtio.c_ccVTIME = 0;newtio.c_ccVMIN = 0;newtio.c_cflag |= (CLOCAL|CREAD);newtio.c_oflag|=OPOST;newtio.c_iflag &=(IXON|IXOFF|IXANY); cfsetispeed(&newtio,baudrate); cfsetospeed(&newtio,baudrate); tcflush(fd, TCIFLUSH);if (tcsetattr(fd,TCSANOW,&newtio) != 0)perror(SetupSerial 3);return -1;return 0;int readport(int fd,char *buf,int len,int maxwaittime)/读数据,参数为串口,BUF,长度,超时时间int no=0;int rc;int rcnum=len;struct timeval tv;fd_set readfd;tv.tv_sec=maxwaittime/1000;/SECONDtv.tv_usec=maxwaittime%1000*1000;/USECONDFD_ZERO(&readfd);FD_SET(fd,&readfd);rc=select(fd+1,&readfd,NULL,NULL,&tv);if(rc0)while(len)rc=read(fd,&bufno,1);if(rc0)no=no+1;len=len-1;if(no!=rcnum)return -1;/如果收到的长度与期望长度不一样,返回-1return rcnum;/收到长度与期望长度一样,返回长度elsereturn -1;return -1;int writeport(int fd,char *buf,int len)/发送数据write(fd,buf,len);void clearport(int fd)/如果出现数据与规约不符合,可以调用这个函数来刷新串口读写数据tcflush(fd,TCIOFLUSH);main()int fd,rc,i,ret;unsigned char rbuf256;unsigned char wbuf256=;for(i=0;i0)ret=setport(fd,4800,8,1,o

温馨提示

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

评论

0/150

提交评论