我在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
没有好的结果。如果您想了解更多信息,请询问。