在基于AT91的嵌入式 linux中接收串口数据时,发现对于接收的数据经常出现接收不完整的现象。一帧的数据可能会被当做两帧接收,导致对于一帧数据接收出现问题。虽然这种情况在一般情况下,并不是经常出现,但是只要数据量稍微大一些,情况就会出现。
于是仔细看了程序中关于串口配置这一块的程序,
int set_opt( int fd, int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios oldtio;
struct termios newtio;
if ( tcgetattr(fd, &oldtio) != 0) {
perror("SetupSerial 1" );
return -1;
}
bzero( &newtio, sizeof ( newtio ));
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
switch ( nBits )
{
case 7:
newtio.c_cflag |= CS7;
break ;
case 8:
newtio.c_cflag |= CS8;
break ;
}
switch ( nEvent )
{
case 'O' :
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= INPCK ;
break ;
case 'E' :
newtio.c_iflag |= INPCK ;
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
break ;
case 'N' :
newtio.c_cflag &= ~PARENB;
break ;
}
switch ( nSpeed )
{
case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break ;
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break ;