我玩与XBEE无线电,我使用的Linux(Ubuntu的9.10)和XBEE不会出现使用MY代码时通过串行端口发送NULL值。当我使用XCTU程序(附带在一个单独的窗口框中XBEE股票长期模拟器),我看到通过串口此输出时,一个新的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,无流控制。你可以看到我还使用了serial-> USB驱动程序,但因为我似乎得到的数据我敢肯定,部分工作。

我的猜测是,当我bzero选项,我正在为0x00控制字符?我不确定。当我不bzero选项,我只能一次读取5个字节,我会丢失数据。这感觉就像我有一个流量控制或波特率问题,所以我bzero(),现在我没有得到空值。

我也只是用我的Minicom Linux系统上并抓获输出。我得到了相同的信息,没有空值(这真的搞乱包大小为那些不熟悉的协议)。难道我的代码已经设置串口成Minicom是不改变的状态?我迷路。

感谢您的帮助!

有帮助吗?

解决方案

c_cflags的初始化看起来错了,通过使用按位求反,你基本上设置的所有CRTSCTS旁边的位:

options.c_cflag = ... | ~CRTSCTS | ...;

您应该见好就收了CRTSCTS如果该标志不应该设置。

其他提示

的Digi已发布的ANSI C代码 xbee_ansic_library 时,一个开源(MPL 2.0)库进行通信,的XBee模块API模式。它支持POSIX(Linux操作系统,BSD,Mac OS X中,Cygwin的),视窗(MinGW的/ MSYS),DOS(OpenWatcom)和一些嵌入式平台。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top