在调试串口软件过程中遇到一个烦人的问题,就是上位机(PC)与下位机(Linux设备)串口交互时,PC串口发送的数据中有0D的,下位机接收时都变成0A,这就造成了串口数据的CRC检验失败,后来发现是串口的设置有误才导致这个问题的出现,下面附上设置需要添加的内容。
//预防0D强制变0A
options.c_iflag &= ~ICRNL;
以下为我串口的设置代码,希望能给自己警示的同时给大家带来帮助:
static int32 dev_serial_port_set_parity(int32 databits,int32 stopbits,int32 parity)
{
printf("set_Parity begin\n");
struct termios options;
if ( tcgetattr( serial_port_fd,&options) != 0)
{
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE;
switch (databits) /*设置数据位数*/
{
case 7:
options.c_cflag |= CS7;
break;
case 8: