51uwb.cn

 找回密码
 立即注册
查看: 5116|回复: 2
打印 上一主题 下一主题

dwt_setrxtimeout的疑惑

[复制链接]

6

主题

19

帖子

91

积分

注册会员

Rank: 2

积分
91
跳转到指定楼层
楼主
发表于 2020-6-18 17:46:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
根据手册里面的描述,dwt_setrxtimeout函数的参数是'Timeout time in micro seconds (1.0256 us). If this is 0, the timeout will be disabled.'
我理解为:如果dwt_setrxtimeout(0); 程序就会一直阻塞,直到收到消息。
但是实际运行的结果是,程序不会阻塞,而是会阻塞一段时间后返回SYS_STATUS_ALL_RX_ERR,
请问是不是我的设置有问题?
代码如下:

    dwt_setrxtimeout(0);
    dwt_rxenable(DWT_START_RX_IMMEDIATE);

    while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))
    { };

    if (status_reg & SYS_STATUS_RXFCG)
    {
           // 收到消息到这里
    }
    else
    {
          // 不会到这里
    }

回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
沙发
发表于 2020-6-20 17:07:23 | 只看该作者
stm32 程序不会阻塞。
这个阻塞是dw1000 内部状态机
回复

使用道具 举报

2

主题

22

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
板凳
发表于 2020-8-27 13:50:19 | 只看该作者
dwt_setrxtimeout(0)是设置的dwm1000模块超时时间为0,程序一直阻塞。
stm32是根据while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))获取DWM1000寄存器状态来判断是否获取到数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-11-23 18:38 , Processed in 0.013045 second(s), 4 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表