- 论坛徽章:
- 0
|
我的是USB转串口, 设备是 ttyUSB0 , 在开发板上运行了写程序后运行,
在PC上运行自己写的接收程序,读不出来? 但是我直接 cat /dev/ttyUSB0 , 可以读出数据, 这个是什么原因呢?
这个是PC读程序
int set_opt(int fd,int nspeed,int nbits,int nevent,int nstop)
{
struct termios new;
bzero(&new,sizeof(new));
new.c_cflag=CLOCAL|CREAD;
new.c_cflag&=~CSIZE;
switch (nbits)
{
case 7:
new.c_cflag|=CS7;
break;
case 8:
new.c_cflag|=CS8;
break;
}
switch(nevent)
{
case 'O':
new.c_cflag|=PARENB;
new.c_cflag|=PARODD;
new.c_iflag|=INPCK|ISTRIP;
break;
case 'E':
new.c_cflag|=PARENB;
new.c_cflag|=~PARODD;
new.c_iflag|=INPCK|ISTRIP;
break;
case 'N':
new.c_cflag&=~PARENB;
break;
}
switch(nspeed)
{
case 9600:
cfsetispeed(&new,B9600);
cfsetospeed(&new,B9600);
break;
case 115200:
cfsetispeed(&new,B115200);
cfsetospeed(&new,B115200);
break;
default:
cfsetispeed(&new,B9600);
cfsetospeed(&new,B9600);
break;
}
switch(nstop)
{
case 1:
new.c_cflag&=~CSTOPB;
break;
case 2:
new.c_cflag|=CSTOPB;
break;
}
new.c_cc[VTIME]=0;
new.c_cc[VMIN]=0;
tcflush(fd,TCIFLUSH);
if (tcsetattr(fd,TCSANOW,&new)!=0){
perror("set error");
exit(0);
}
return 0;
}
int main(int arg,char **argc)
{
struct termios oldsetting;
char buf[10];
int fd;
fd_set fdset;
if (fd=open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY)<0){
perror("open");
exit(0);
}
if (tcgetattr(fd,&oldsetting)!=0){
perror("get setting");
exit(0);
}
if (set_opt(fd,115200,8,'N',1)!=0){
perror("setopt");
exit(0);
}
FD_ZERO(&fdset);
FD_SET(fd,&fdset);
while(FD_ISSET(fd,&fdset)){
if (select(fd+1,&fdset,NULL,NULL,NULL)<0)
perror("select");
else {
read(fd,buf,10);
printf("the buff is %s\n",buf);
}
}
printf("over");
close(fd);
return 0;
}
[[i] 本帖最后由 star316 于 2009-6-13 11:31 编辑 [/i]] |
|