Nordic nRF51 DK nrf_esb_init() 不返回

问题描述 投票:0回答:2

我正在 nRF51 DK 上开发并发 BLE 和 Shockburst 应用程序。首先,我尝试单独运行 Shockbust。它已编译,将其加载到板上没有问题。但是当我运行它时,它不起作用。我想我发现了错误,但我不知道如何解决:

nrf_esb_init()函数不返回。我用 LED 围绕该功能进行测试。 LED_1 亮起,因此该函数被调用,但 LED_2 从未闪烁:

void esb_wake(void) {
  nrf_gpio_pin_toggle(LED_1); // flash
  nrf_esb_init(NRF_ESB_MODE_PTX);
  nrf_gpio_pin_toggle(LED_2); //does not flash

  nrf_esb_set_base_address_0(addr0);
  nrf_esb_set_base_address_1(addr1);
  nrf_esb_set_channel(rf_channel);

  uint32_t err_code = timeslot_sd_init();
  APP_ERROR_CHECK(err_code);
  nrf_esb_enable();
  nrf_esb_set_max_number_of_tx_attempts(1); 

}

我使用SDK 10.0和Softdevice s310。

有人知道如何解决我的问题吗?

esb nrf51
2个回答
2
投票

我自己解决了问题:

正如我所说,我使用软设备,这就是邪恶。软设备是“板子的主人”。 ShockBurst 不是软设备的一部分。所以当我使用一些外部代码时我必须告诉软设备。解决方案是不在时隙开始之前调用 nrf_esb_init()。因此,我将该函数移至 NRF_RADIO_CALLBACK_SIGNAL_TYPE_START 情况下的时隙事件处理程序中。


0
投票

我遇到了类似的问题,但即使我在时间段后运行它,下面的代码仍然卡住

  void initialize_fifos() {
       reset_fifos();
             NRF_LOG_INFO("initialize_fifos %d:\n", 1);
        for (int i = 0; i < 8; i++)
        {
            m_tx_fifo.p_payload[i] = &m_tx_fifo_payload[i];
        }
            
        for (int i = 0; i < 8; i++)
        {
            m_rx_fifo.p_payload[i] = &m_rx_fifo_payload[i];
                      NRF_LOG_INFO("Received Payload %d:\n", i);
                    
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.