linux 串口源码,LINUX串口通讯源码.docx

主要函数

int openport(char *Dev) // 打开串口

int setport(int fd, int baudjnt databitsjnt stopbits,int parity)//设置串口,波特率,数据位,

停止位,校验

int readport(intfd.char *buf,int lenjnt maxwaittime)//?数据,参数为串口,BUF,长度,超

时时间

int writeport(int fd,char *buf,int len) //发送数据

void clearport(int fd)〃如果出现数据与规约不符合,可以调用这个函数来刷新串口读写

数据

如果有BUG,请大家及时回复给我,EMAIL:。

#include

#include #include #include #include #include #in elude

vermo.h〉

int ope nport(char *Dev)

{

int fd = open( Dev, O_RDWR|O_NOCTTY|O_NDELAY );

if (-1 == fd)

{

perror(MCanMt Open Serial Port”);

return -1;

}

else

return fd;

} int setport(int fd, int baudjnt databitsjnt stopbitsjnt 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_cflag

newtio.c_cflag &=~CSIZE;

switch (databi⑸/"设置数据位数"/

{

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; r Clear parity enable */ newtio.cjflag &= ~INPCK; /* Enable parity checking 7 break;

case 'o':

case O:

newtio.c_cflag |= (PARODD | PARENB);/* 设置为奇效验?/ newtio.cjflag |= INPCK;/* Disnable parity checking V

break;

case O:

case 'E?:

newtio.c_cflag |= PARENB;广 Enable parity */ newtio.c_cflag &= ~PARODD; /* 转换为偶效验*/ newtio.cjflag |= INPCK; /* Disnable parity checking 7 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 7

break;

)

switch (stopbits)//设宜停止位

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值