在Ubuntu9.10下面做串口通信,可是read时数据会丢失,我想可能是串口设置的问题,串口设备属性:波特率57600,数据位8,无校检,停止位1.每次发送一帧为16个字节的数据。串口设置函数: ...... void InitCom(int fd) { stuct termios opt; tcgetatttr(fd,&opt); memset(&opt,0,sizeof(struct opt)); cfsetispeed(&opt,B57600); cfsetospeed(&opt,B57600);
opt.c_oflag &= ~OPTST;
opt.c_cflag &= ~CRTSCTS; opt.c_cflag |= (CLOCAL | CREAD); opt.c_cflag &= ~PARENB; opt.c_cflag &= ~CSTOPB; opt.c_cflag &= ~CSIZE; opt.c_cflag |= CS8;
opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
opt.c_cc[VMIN] = 0; opt.c_cc[VTIME] = 2; tcsetattr(fd,TCSANOW,&opt);
} .... 设置完成之后向串口设备文件/dev/ttyUSB0写入握手帧,完成通信过程之后接收返回帧,接收函数: void Recv_Data() { unsigned char buf[16]; int i,ret; while(1) { ret = read(fd,buf,16); for(i =0;i<16;i++) { printf("%-3X",buf[i]); if(i == 15 ) printf("...........ret:%d\n",ret); } } } .............. 函数只接收底层返回上来的帧,在xp下面测试其返回值很正常,可是到linux下却是出现问题。有时数据移位,有时数据丢失(有时丢失一个字节,有时却丢失整个帧)。但是底层确实是有数据传上来。 请问该怎么设置设备属性,或者有其他方式能解决该问题?请各位指导下。谢谢!
_________________ 这条路很远很漫长也很坎坷,但是要淡定,要风骚
|