linux 串口 换行十六制,Linux与Windows的串口通信问题?

博主探讨了Windows上位机与嵌入式Linux通过串口通信时遇到的问题,发现从下位机发送带换行符的数据时,Windows端意外接收到额外的回车符。经排查发现,编译器解释差异可能导致此现象,Linux设置为Raw模式并未处理数据。
摘要由CSDN通过智能技术生成

Windows运行上位机程序,开发板上运行嵌入式Linux,上面跑下位机程序。我需要它们之间串口通信,现在的问题是我从上位机向下位机用串口发送数据,下位机可以正常收到。而当我从下位机向上位机发送的数据中带有换行符(ASCII码:10)的时候,在上位机中也正常收到换行符,但紧接着换行符后面却多了个回车符(ASCII码:13),很奇怪!我把linux端的串口设置为Raw输出模式,说明发出的数据未加任何处理,为什么在Windows端却多收到回车符?

我的Linux端串口设置:Raw模式输入输出,8数据位,1停止位,无校验位,输入/输出波特率都为115200。主要代码如下:

struct termios tOpt;

tcgetattr(iFd, &_tSave_termios);

tOpt = _tSave_termios;

tcflush(iFd, TCIOFLUSH);

cfsetispeed(&tOpt, iSpeed);

cfsetospeed(&tOpt, iSpeed);

tOpt.c_cflag |= CS8;

tOpt.c_cflag &= ~CSTOPB;

tOpt.c_cflag &= ~PARENB;

tOpt.c_iflag &= ~INPCK;

tOpt.c_cflag |= (CLOCAL | CREAD);

tOpt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Raw Input */

tOpt.c_oflag &= ~OPOST;/* Raw Output */

tOpt.c_cc[VTIME] = 10;/* Set timeout: 1s */

tOpt.c_cc[VMIN] = 0;

tcflush(iFd, TCIOFLUSH);

tcsetattr(iFd, TCSANOW, &tOpt);

|

这种问题于linux什么的无关,而是编译器解释过程中产生的问题。

"n"有的编译器可能就只是认为十六进制的0x0a,但有的编译器就认为是“0x0d0x0a”,就这么简单!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值