最近在调试Linux环境下串口接收代码时发现了一个现象:子串口模块发送的数据0x0D,在ARM板上接收并打印出来时变成了0x0A。
其实这个问题在很久以前就遇到过,一时想不起来了,现在记录如下:
在配置串口时,添加上以下语句:
Newtio.c_iflag &= ~ICRNL;
理论依据是:
ICRNL 将输入的回车转化成换行(如果IGNCR未设置的情况下)
0x0D 回车符CR
0x11 ^Q VSTART字符
0x13 ^S VSTOP字符
所以在传输0x0D 0x11 0x13等特殊字符的时候都会出现接收异常的情况。