0

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

我的串行连接的配置很简单:

8N1 9600 波特无 CTSRTS,无软件流控制。我的设置中一定有一些小错误,因为大多数字符都是正确的,但有些是错误的:91 变成了 11(10010001 -> 00010001,所以只有 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() 从串行通信流中读取数据,并且该程序仅在我第一次运行此代码以设置正确的配置时才“工作”)

知道这里出了什么问题吗?我读过这个:http ://www.easysw.com/~mike/serial/serial.html 但无法弄清楚。

我也尝试过的标志如下:

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

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

4

1 回答 1

0

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

于 2013-02-02T05:19:33.360 回答