当前位置: 技术问答>linux和unix
Linux与Windows的串口通信问题?
来源: 互联网 发布时间:2016-02-05
本文导语: Windows运行上位机程序,开发板上运行嵌入式Linux,上面跑下位机程序。我需要它们之间串口通信,现在的问题是我从上位机向下位机用串口发送数据,下位机可以正常收到。而当我从下位机向上位机发送的数据中带有...
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端串口设置: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”,就这么简单!!!
"n"有的编译器可能就只是认为十六进制的0x0a,但有的编译器就认为是“0x0d0x0a”,就这么简单!!!