当前位置: 技术问答>linux和unix
Linux串口通讯\r\n被转换成诡异的字符
来源: 互联网 发布时间:2016-09-26
本文导语: 大家好,最近在搞串口通讯,我在应用程序里发送字符rn,结果在驱动里打印出来这两个字符变成了 0x00 0x55而不是 0x0d 0x0a,串口的设置如下: /* Set up for 8N1, 8 data bits, no parity, 1 stop bit. Disable hardwar...
大家好,最近在搞串口通讯,我在应用程序里发送字符rn,结果在驱动里打印出来这两个字符变成了 0x00 0x55而不是 0x0d 0x0a,串口的设置如下:
/* Set up for 8N1, 8 data bits, no parity, 1 stop bit. Disable hardware flow
control. Ignore control signals, and enable the port for reading */
options.c_cflag &= ~(PARENB | CSTOPB | CSIZE | CRTSCTS);
options.c_cflag |= (CS8 | CLOCAL | CREAD);
/* Set up for raw (non-canonical) input, disable echoing and signalling */
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
/* Disable software flow control */
options.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL | INLCR | IGNCR);
/* Set up for raw output */
options.c_oflag &= ~OPOST;
请大家帮忙看看,是不是串口设置等地方出了问题?谢谢!!!
/* Set up for 8N1, 8 data bits, no parity, 1 stop bit. Disable hardware flow
control. Ignore control signals, and enable the port for reading */
options.c_cflag &= ~(PARENB | CSTOPB | CSIZE | CRTSCTS);
options.c_cflag |= (CS8 | CLOCAL | CREAD);
/* Set up for raw (non-canonical) input, disable echoing and signalling */
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
/* Disable software flow control */
options.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL | INLCR | IGNCR);
/* Set up for raw output */
options.c_oflag &= ~OPOST;
请大家帮忙看看,是不是串口设置等地方出了问题?谢谢!!!
|
在实际中的情况往往是非常多特例,比如,在用write发送数据时没有键入回车,信息就将发送不出去的情况,这主要是因为我们在输出输入时是按照规范模式接受到回车或换行才发送,而非常多情况我们是不必回车和换行的,这时,应当转换到行方式输入,设置options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);不经处理直接发送。
又比如在我们发送字符0x0d的时候,往往接受端得到的字符是0x0a 这是怎么回事,原因是在串口设置中c_iflag和c_oflag中存在从NL-CR 和CR-NL的映射,也就是说,串口能把回车和换行看成一个字符,所以,此时我们应该屏蔽掉这些,用options.c_oflag &=~(INLCR|IGNCR|ICRNL|);和options.c_oflag &=~(ONLCR|OCRNL); 进行设置。
又比如在我们发送字符0x0d的时候,往往接受端得到的字符是0x0a 这是怎么回事,原因是在串口设置中c_iflag和c_oflag中存在从NL-CR 和CR-NL的映射,也就是说,串口能把回车和换行看成一个字符,所以,此时我们应该屏蔽掉这些,用options.c_oflag &=~(INLCR|IGNCR|ICRNL|);和options.c_oflag &=~(ONLCR|OCRNL); 进行设置。
|
我觉得可能是波特率的设置不正确导致的。