- 论坛徽章:
- 0
|
最近在串口通信上遇到了问题,我的串口配置程序如下:
int set_dev(int nfd, int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios newtio;
if (tcgetattr(nfd, &newtio) != 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;
default:
newtio.c_cflag |= CS8;
break;
}
/*设置效验类型位*/
switch (nEvent)
{
case 'o':
case 'O':
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
break;
case 'e':
case 'E':
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
break;
case 'n':
case 'N':
newtio.c_cflag &= ~PARENB;
newtio.c_iflag &= ~INPCK; /* Enable parity checking */
break;
default:
newtio.c_cflag &= ~PARENB;
newtio.c_iflag &= ~INPCK;
break;
}
/*设置串口通信速率*/
switch (nSpeed)
{
case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break;
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case 38400:
cfsetispeed(&newtio, B38400);
cfsetospeed(&newtio, B38400);
break;
case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
default:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
}
/* 设置停止位*/
switch (nStop)
{
case 1:
newtio.c_cflag &= ~CSTOPB;
break;
case 2:
newtio.c_cflag |= CSTOPB;
break;
default:
newtio.c_cflag &= ~CSTOPB;
break;
}
/*设置最少字符和等待时间*/
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
/*刷清输入输出队列*/
tcflush(nfd, TCIOFLUSH);
/*激活配置*/
if ((tcsetattr(nfd, TCSANOW, &newtio)) != 0)
{
perror("com set error");
return -1;
}
fprintf(stdout, "set done!\n");
return 0;
}
在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)显示正常。
但是当波特率为 115200 时,解受到的数据就出现乱码的现象!
真的不知道,原因出现在哪里!
希望高手们,大虾们,帮我解决下这个问题!
谢谢……
另外:若这些设置没什么错的话,那那些情况会影响 数据的传输 ? |
|