gpt4 book ai didi

c - 串行端口不发送 NULL 值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:45 25 4
gpt4 key购买 nike

我正在玩 XBEE radio ,我正在使用 Linux (Ubuntu 9.10),并且在使用我的代码时,XBEE 似乎没有通过串行端口发送 NULL 值。当我使用 XCTU 程序(XBEE 随附在单独的 Windows 盒子上的常用术语模拟器)时,当新的 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 驱动程序,但由于我似乎确实获得了数据,所以我很确定该部分正在工作。

我的猜测是当我 bzero 选项时,我正在使 0x00 成为控制字符?我不知道。当我不使用 bzero 选项时,我一次只能读取 5 个字节,并且会丢失数据。感觉我遇到了流量控制或波特率问题,所以我 bzero() 现在我没有得到 NULL。

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

感谢您的帮助!

最佳答案

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

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

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

关于c - 串行端口不发送 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com