当前位置: 技术问答>linux和unix
一个linxu下读串口的程序问题
来源: 互联网 发布时间:2016-08-28
本文导语: 大家好,我编写一个读取ttyUBS0的linux程序时候遇到了问题。事情的经过是这样子的。我用一台pc上装xp,上面使用一个串口调试工具,不停的通过com1向我的笔记本(装的是linux系统)的ttyUBS0口发数据,我在linux下编写...
大家好,我编写一个读取ttyUBS0的linux程序时候遇到了问题。事情的经过是这样子的。我用一台pc上装xp,上面使用一个串口调试工具,不停的通过com1向我的笔记本(装的是linux系统)的ttyUBS0口发数据,我在linux下编写一个程序,要读这个数据,可是怎么也读不到。串口调试工具配置为8,N,1模式,不知道是出了什么问题。
#include
#include /*Unix标准函数定义*/
#include /**/
#include /**/
#include /*文件控制定义*/
#include /*PPSIX终端控制定义*/
#include /*错误号定义*/
#include
#include
int main()
{
int fd,readnum;
char *dev="/dev/ttyUSB0",recv[100];
struct termios opt,oldopt;
fd = open( dev, O_RDWR );
tcgetattr( fd,&oldopt);
tcgetattr( fd,&opt);
cfsetispeed(&opt, B115200);//9600
cfsetospeed(&opt, B115200);
opt.c_cflag &= ~PARENB; //N
opt.c_cflag &= ~INPCK;
opt.c_cflag &= ~CSTOPB;//1
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= CS8; //8
opt.c_iflag &= ~(IXON | IXOFF | IXANY);
opt.c_cc[VTIME] = 0;
opt.c_cc[VMIN] = 0;
opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
opt.c_oflag &= ~OPOST; /*Output*/
tcflush(fd, TCIOFLUSH);
tcsetattr(fd, TCSANOW, &opt);
while(1)
{
bzero(recv,100);
//printf("hahahan");
while((readnum = read(fd,recv,100))>0)
{
printf("%sn",recv);
}
}
tcflush(fd, TCIOFLUSH);
tcsetattr(fd, TCSANOW, &oldopt);
close(fd);
}
有经验的高手来指点下吧。
#include
#include /*Unix标准函数定义*/
#include /**/
#include /**/
#include /*文件控制定义*/
#include /*PPSIX终端控制定义*/
#include /*错误号定义*/
#include
#include
int main()
{
int fd,readnum;
char *dev="/dev/ttyUSB0",recv[100];
struct termios opt,oldopt;
fd = open( dev, O_RDWR );
tcgetattr( fd,&oldopt);
tcgetattr( fd,&opt);
cfsetispeed(&opt, B115200);//9600
cfsetospeed(&opt, B115200);
opt.c_cflag &= ~PARENB; //N
opt.c_cflag &= ~INPCK;
opt.c_cflag &= ~CSTOPB;//1
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= CS8; //8
opt.c_iflag &= ~(IXON | IXOFF | IXANY);
opt.c_cc[VTIME] = 0;
opt.c_cc[VMIN] = 0;
opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
opt.c_oflag &= ~OPOST; /*Output*/
tcflush(fd, TCIOFLUSH);
tcsetattr(fd, TCSANOW, &opt);
while(1)
{
bzero(recv,100);
//printf("hahahan");
while((readnum = read(fd,recv,100))>0)
{
printf("%sn",recv);
}
}
tcflush(fd, TCIOFLUSH);
tcsetattr(fd, TCSANOW, &oldopt);
close(fd);
}
有经验的高手来指点下吧。
|
/*设置波特率*/
switch( nSpeed )
{
case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break;
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
case 460800:
cfsetispeed(&newtio, B460800);
cfsetospeed(&newtio, B460800);
break;
default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
}
拨特率不匹配,XP是9600,LINUX是cfsetispeed(&opt, B115200)
错了B115200
switch( nSpeed )
{
case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break;
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
case 460800:
cfsetispeed(&newtio, B460800);
cfsetospeed(&newtio, B460800);
break;
default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
}
拨特率不匹配,XP是9600,LINUX是cfsetispeed(&opt, B115200)
错了B115200