aimar500 发表于 2020-6-18 17:46:56

dwt_setrxtimeout的疑惑

根据手册里面的描述,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
    {
          // 不会到这里
    }

蓝点无限 发表于 2020-6-20 17:07:23

stm32 程序不会阻塞。
这个阻塞是dw1000 内部状态机

dragon_L 发表于 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寄存器状态来判断是否获取到数据。
页: [1]
查看完整版本: dwt_setrxtimeout的疑惑