0

我正在 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。

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

4

1 回答 1

2

我能够自己解决问题:

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

于 2016-09-09T12:52:29.667 回答