想做一个beacon,但是又想着用手机能改变其广播间隔,于是想出了一个办法,上电 100S内如果没有主机连接就进入beacon,如果主机连接了 然后就可以设置了。参考了SDK 的beacon例子以后就开始搞了。
主要思路就是 把从机的广播持续时间改为 10S
-----》 #define APP_ADV_DURATION 1000 // 广播持续时间,单位:10ms
然后在
-----》 on_adv_evt 回调中 的 广播超时事件
-----》 BLE_ADV_EVT_IDLE 设置为beacon模式。然后启动广播就可以了
-----》 advertising_beacon_init(); -------下图是设置beacon 模式
-----》 beacon_advertising_start();


上图中是解决问题以后的配置,主要问题出在这个函数
-----》 err_code = sd_ble_gap_adv_set_configure(&m_adv_test.adv_handle, &m_adv_data, &m_adv_params);
为改正之前是这样的
err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &m_adv_params);
句柄的定义是这样的
static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
err_code = sd_ble_gap_adv_set_configure(m_adv_handle, &m_adv_data, &m_adv_params);
错误代码是
ERROR 4 [NRF_ERROR_NO_MEM]
根据SDK文档 提示 是 No Memory for operation.
总结:如果只创建一个广播实例的话,但是广播的初始化是两个,这样就会出现错误了。对于我这种菜鸟来说根本没有解决问题的思路。通过 临哥耐心帮助 才恍然大悟,但心里还是有些疑问,需要使劲搞一搞 理论了,这个很重要。只是改改例子中的那些代码,根本学不会蓝牙,只能是代码的搬运工!最后感谢 临哥的耐心帮助!