Serial port 串口zigbee通信-一些错误字符

Serial port 串口zigbee通信-一些错误字符,serial-port,zigbee,termios,Serial Port,Zigbee,Termios,我在ubuntu的串行通信中遇到了一些问题。我正在编写C++代码连接到我的ZigBee节点,但问题不是ZigBee配置。因为GTKTERM(ubuntu的普通串行终端)读取的数据是正确的 串行连接的配置很简单: 8N1 9600波特无CTSRT,无软件流控制。 我的设置中一定有一些小错误,因为大多数字符是正确的,但有些是错误的:91变为11(10010001->0000001,所以只有1位关闭) 这是设置连接的代码: int fd = open(adres , O_RDWR | O_NOCTTY

我在ubuntu的串行通信中遇到了一些问题。我正在编写C++代码连接到我的ZigBee节点,但问题不是ZigBee配置。因为GTKTERM(ubuntu的普通串行终端)读取的数据是正确的

串行连接的配置很简单:

8N1 9600波特无CTSRT,无软件流控制。 我的设置中一定有一些小错误,因为大多数字符是正确的,但有些是错误的:91变为11(10010001->0000001,所以只有1位关闭)

这是设置连接的代码:

int fd = open(adres , O_RDWR | O_NOCTTY | O_NDELAY);

struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD);
// no parity 8N1
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

tcsetattr(fd, TCSANOW, &options);
我还注意到,当您更改这些配置、更改程序并再次运行时,这些配置并没有设置为默认配置。因此,除非您更改它们,否则它们在程序的独立执行之间是相同的。也许有人有一个所有默认值的列表,所以我可以在启动时始终恢复默认值。(我得到了第二个程序,它使用fopen()从串行通信流中读取数据,这个程序只有在我第一次运行此代码以设置正确的配置时才“起作用”)

知道这里出了什么问题吗?我读过这篇文章:但我想不出来

我还尝试了以下标志:

options.c_cflag |= CRTSCTS;   // hardware flow control
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //raw input mode
options.c_oflag &= ~OPOST;                  // raw output mode
options.c_iflag |= (INPCK | ISTRIP);    // parity check
options.c_iflag &= ~(IXON | IXOFF | IXANY); //disable flow control

没有好结果。如果您想了解更多信息,请询问。

如果您使用的是XBee模块,您可能需要查看此Digi已作为开放源代码发布,用于与XBee硬件通信。即使您不使用XBee,您也可以重新使用它们的串行库——它们支持POSIX、Win32甚至DOS(仅限COM1)。

当我重新启动它时,它可以正常工作。所以,在编程时,一定有某种配置被我更改过一次,把一切都搞砸了。由于关闭文件不会还原默认值,因此在重新启动之前,此配置一直错误。我猜这就是问题所在,除非有人认为是别的什么?请让我知道,我不想再次拥有它。谢谢,正如我之前所说,重新启动解决了它。我必须在我的一个程序中设置一次配置,它会一直粘住我,直到我重新启动。谢谢你的信息