红联Linux门户
Linux帮助

linux串口接收的问题,有时接收成功,有时失败

发布时间:2013-01-29 18:17:47来源:红联作者:yanyachao1989
工作中要用到串口,但是电脑没有串口,所以买了一个USB转串口的东西,我先做串口自发自收的实验,把接收端和发送端短接起来,先向串口发送几个字节的数据,再从串口接收数据。现在的问题是,USB转串口刚插上的一段时间,可以接受到字符,但过一段时间就不行了,把USB转串口工具取下来,再插上去,又可以接收成功,但过一会又接收失败,所以我不得不频繁的把USB取下再插上,现在把源码贴出来,大伙帮我看看[code]//serial test

#include
#include
#include
#include
#include
#include
#include
#include

#define TTY "/dev/ttyUSB0" //usb转串口工具的设备名
#define RATE B9600 //波特率


int main()
{
int fd; //串口文件描述符
int rnum=0; //接收字节数
int wnum=0; //发送字节数
struct termios newopt;
struct termios oldopt;
char send[]="abcde";
char rec[20];
int len=sizeof(send);
int length;



//打开设备文件
fd=open(TTY,O_RDWR|O_NONBLOCK);
if(fd<0)
{
printf("open %s error\n",TTY);
return 1;
}
else
printf("open %s ok!\n",TTY);


tcgetattr(fd,&oldopt); //保存原始串口配置

bzero(&newopt,sizeof(newopt));
cfmakeraw(&newopt); //只是发送接收字符,不进行处理,所以用原始模式
cfsetispeed(&newopt,RATE); //设置输入波特率
cfsetospeed(&newopt,RATE); //设置输出波特率
newopt.c_cc[VTIME]=0;
newopt.c_cc[VMIN]=0;
tcsetattr(fd,TCSANOW,&newopt); //串口的设置即刻生效

//读写设备文件
while(1)
{
write(fd,&len,sizeof(int));
wnum=write(fd,send,len); //向串口发送数据
if(wnum>0)
printf("write success:%d\n",wnum);
else
printf("write fail\n");
sleep(1);

read(fd,&length,sizeof(int));
printf("length=%d\n",length);
rnum=read(fd,rec,length); //通过串口接收数据
if(rnum>0)
printf("read success %d : %s\n",rnum,rec);
else
printf("read fail\n");
sleep(1);
}
return 0;
}







[/code]
文章评论

共有 1 条评论

  1. 相思爱文 于 2013-01-31 23:03:29发表:

    试试换一个软换器