|
|
我在pc上测试串口的读写,串口线连接com1和com2,读写在一个程序里面实现,现在读串口部分一直有问题,达人们看一下,是这样先写后读的测试方法有问题还是串口设置有问题导致读不到数据?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define FALSE -1
#define TRUE 1
main()
{int fd;
int nread;
int nwrite;
char buff[512];
struct termios newtio;
fd=open("/dev/ttyS1",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
printf("COM Open Error\n");
return -1;
}
tcgetattr(fd,&newtio);
cfsetispeed (&newtio,B9600);
cfsetospeed (&newtio,B9600);
newtio.c_cflag=CS8|CLOCAL|CREAD;
newtio.c_lflag=~(ICANON|ECHO|ECHOE|ISIG);
newtio.c_oflag=~OPOST;
newtio.c_iflag=IGNPAR;
newtio.c_cc[VINTR] =0;
newtio.c_cc[VQUIT] =0;
newtio.c_cc[VERASE] =0;
newtio.c_cc[VKILL]=0;
newtio.c_cc[VEOF]=4;
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VSWTC]=0;
newtio.c_cc[VSTART]=0;
newtio.c_cc[VSTOP]=0;
newtio.c_cc[VSUSP]=0;
newtio.c_cc[VEOL]=0;
newtio.c_cc[VREPRINT]=0;
newtio.c_cc[VDISCARD]=0;
newtio.c_cc[VWERASE]=0;
newtio.c_cc[VLNEXT]=0;
newtio.c_cc[VEOL2]=0;
tcflush(fd,TCIFLUSH);
tcsetattr (fd,TCSANOW,&newtio);
if (tcsetattr(fd,TCSANOW,&newtio)!=0)
{
perror("SetupSerial 3");
return (FALSE);
}
printf(" lease input:");
scanf("%s",buff);
nwrite=write(fd,buff,strlen(buff));
printf("Len=%d",nwrite);
printf("\n%s",buff);
close(fd);
//* 读数据*//
fd=open("/dev/ttyS0",O_RDWR);
if(fd==-1)
{
printf("COM Open Error\n");
return -1;
}
tcgetattr(fd,&newtio);
cfsetispeed (&newtio,B9600);
cfsetospeed (&newtio,B9600);
newtio.c_cflag=CS8|CLOCAL|CREAD;
newtio.c_lflag=~(ICANON|ECHO|ECHOE|ISIG);
newtio.c_oflag=~OPOST;
newtio.c_iflag &=~(INLCR|ICRNL|IGNCR|IXON|IXOFF|IUCLC);
newtio.c_cc[VINTR] =0;
newtio.c_cc[VQUIT] =0;
newtio.c_cc[VERASE] =0;
newtio.c_cc[VKILL]=0;
newtio.c_cc[VEOF]=4;
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VSWTC]=0;
newtio.c_cc[VSTART]=0;
newtio.c_cc[VSTOP]=0;
newtio.c_cc[VSUSP]=0;
newtio.c_cc[VEOL]=0;
newtio.c_cc[VREPRINT]=0;
newtio.c_cc[VDISCARD]=0;
newtio.c_cc[VWERASE]=0;
newtio.c_cc[VLNEXT]=0;
newtio.c_cc[VEOL2]=0;
tcflush(fd,TCIFLUSH);
tcsetattr (fd,TCSANOW,&newtio);
if (tcsetattr(fd,TCSANOW,&newtio)!=0)
{
perror("SetupSerial 3");
return (FALSE);
}
fd_set rfds;
struct timeval tv;
int retval;
long Timeout;
FD_ZERO(&rfd);
FD_SET(fd,&rfds);
Timeout=30000;
tv.tv_sec=Timeout/1000;
tv.tv_usec=(Timeout%1000)*1000;
select(16,&rfds,NULL,NULL,&tv);
if (FD_ISSET(fd,&rfds))
{
nread=read(fd,buff,512);
printf("\nLen=%d\n",nread);
printf("\nbuff=%s",buff);
}
else
//return errno;
close(fd);
exit(0);
} |
|