我在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
没有好结果。如果您想要更多信息,请询问。
答案 0 :(得分:0)
如果你正在使用XBee模块,你可能想看看这个ANSI C XBee Host library Digi已经发布的Open Source用于与他们的XBee硬件进行通信。即使您没有使用XBee,也可以重新使用它们的串行库 - 它们支持POSIX,Win32甚至DOS(仅限COM1)。