C 串行端口不发送空值

C 串行端口不发送空值,c,linux,serial-port,xbee,C,Linux,Serial Port,Xbee,我在玩XBEE收音机,我在使用Linux Ubuntu 9.10,在使用我的代码时,XBEE似乎不会通过串行端口发送空值。当我在单独的windows设备上使用XBEE附带的XCTU programstock术语仿真器时,当新的XBEE加入网络时,我通过串行端口看到以下输出: 7E 00 20 95 00 13 A2 00 40 3B 等等。。。完美的但是,使用我的代码,当新XBEE加入网络时,我看到: 7E 20 95 13 A2 40 3B 下面是我如何打开串行端口的 struct ter

我在玩XBEE收音机,我在使用Linux Ubuntu 9.10,在使用我的代码时,XBEE似乎不会通过串行端口发送空值。当我在单独的windows设备上使用XBEE附带的XCTU programstock术语仿真器时,当新的XBEE加入网络时,我通过串行端口看到以下输出:

7E 00 20 95 00 13 A2 00 40 3B
等等。。。完美的但是,使用我的代码,当新XBEE加入网络时,我看到:

7E 20 95 13 A2 40 3B
下面是我如何打开串行端口的

struct termios options;
int port;

port = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
tcgetattr(port, &options);
bzero(&options, sizeof(options));

options.c_cflag = B9600 | ~CRTSCTS | CS8 | CLOCAL | CREAD;

tcsetattr(port, TCSANOW, &options);
我对代码的作用有自己的理论,但我的理论显然是错误的。我试图打开9600,8N1,无流量控制的端口。你可以看到,我也在使用串行->USB驱动程序,但因为我似乎得到了数据,我很确定这部分工作正常

我猜当我输入零个选项时,我将0x00作为一个控制字符?我不确定。当我不使用bzero选项时,我一次只能读取5个字节,并且会丢失数据。这感觉就像我有一个流量控制或波特率问题,所以我为零,现在我没有得到空值

我还刚刚在Linux系统上使用了Minicom并捕获了输出。我得到同样的信息,没有空。对于那些不熟悉协议的人来说,这真的会弄乱数据包的大小。我的代码是否可以将串行端口设置为minicom不会更改的状态?我迷路了

谢谢你的帮助

c\u cflags的初始化看起来是错误的,通过使用逐位求反,您基本上设置了CRTSCTS旁边的所有位:

如果不应设置该标志,则应省略CRTSCTS。

c\u cflags的初始化看起来是错误的,通过使用按位求反,基本上可以设置CRTSCTS旁边的所有位:

如果不应设置该标志,则应省略CRTSCTS。

Digi发布了一个开源MPL 2.0 ANSI C代码库,用于在API模式下与XBee模块通信。它支持POSIX Linux、BSD、Mac OS X、Cygwin、Windows MinGW/MSYS、DOS OpenWatcom和一些嵌入式平台

如果您仍然在Ubuntu中编写C代码,您可能会感兴趣。

Digi发布了一个开源MPL2.0 ANSI C代码库,用于在API模式下与XBee模块通信。它支持POSIX Linux、BSD、Mac OS X、Cygwin、Windows MinGW/MSYS、DOS OpenWatcom和一些嵌入式平台


如果你还在Ubuntu中编写C代码,这可能会引起你的兴趣。

你清除了C_cc[]数组了吗?这可能允许传递空值和其他控制字符。您是否有一个车载非USB串行端口,可以用来探测USB驱动程序中没有的问题?您是否清除了c_cc[]阵列?这可能允许传递空值和其他控制字符。你有一个板载非USB串行端口,可以用来探测USB驱动程序中没有的问题吗?不仅它工作了,我的校验和功能第一次工作了!第二步,摸索~运算符。它不仅起作用了,而且我的校验和函数第一次起作用了!第二步,摸索~操作符。
options.c_cflag = ... | ~CRTSCTS | ...;