欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Nordic软件二[蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题][BSP代码模块修改管脚和相关机制]

Nordic软件二[蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题][BSP代码模块修改管脚和相关机制]

2024/10/24 2:27:36 来源:https://blog.csdn.net/chengdong1314/article/details/142497345  浏览:    关键词:Nordic软件二[蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题][BSP代码模块修改管脚和相关机制]

蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题

本文摘录于:https://blog.csdn.net/chengbaojin/article/details/103778150只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人!
先参考上面的文章做如下修改:
在这里插入图片描述

将如下代码:
// <0=> NRF_CLOCK_LF_SRC_RC 内部时钟
// <1=> NRF_CLOCK_LF_SRC_XTAL 外部晶振时钟
// <2=> NRF_CLOCK_LF_SRC_SYNTH  从高速时钟合成的低速时钟#ifndef NRF_SDH_CLOCK_LF_SRC
#define NRF_SDH_CLOCK_LF_SRC 1 
#endif// <o> NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. 
#ifndef NRF_SDH_CLOCK_LF_RC_CTIV
#define NRF_SDH_CLOCK_LF_RC_CTIV 0 
#endif
修改为:
// <0=> NRF_CLOCK_LF_SRC_RC 内部时钟
// <1=> NRF_CLOCK_LF_SRC_XTAL 外部晶振时钟
// <2=> NRF_CLOCK_LF_SRC_SYNTH  从高速时钟合成的低速时钟#ifndef NRF_SDH_CLOCK_LF_SRC
#define NRF_SDH_CLOCK_LF_SRC 0 
#endif// <o> NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. 
#ifndef NRF_SDH_CLOCK_LF_RC_CTIV
#define NRF_SDH_CLOCK_LF_RC_CTIV 16 
#endif

除了上面的修改还要修改这里:
在这里插入图片描述

// <o> NRFX_CLOCK_CONFIG_LF_SRC  - LF Clock Source// <0=> RC 
// <1=> XTAL 
// <2=> Synth 
// <131073=> External Low Swing 
// <196609=> External Full Swing #ifndef NRFX_CLOCK_CONFIG_LF_SRC
#define NRFX_CLOCK_CONFIG_LF_SRC 0
#endif

原来是打印怎么都出来不了,修改后打印正常了:
在这里插入图片描述

BSP代码模块修改管脚和回调事件

Nordic用BSP机制来管理button和led,main函数调用buttons_leds_init函数进行初始化:

static void buttons_leds_init(bool * p_erase_bonds)
{bsp_event_t startup_event;uint32_t err_code = bsp_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS, bsp_event_handler);APP_ERROR_CHECK(err_code);err_code = bsp_btn_ble_init(NULL, &startup_event);APP_ERROR_CHECK(err_code);*p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA);
}

这里同时使用了LED和button的功能,回调事件为:

void bsp_event_handler(bsp_event_t event)
{uint32_t err_code;switch (event){case BSP_EVENT_KEY_2:NRF_LOG_INFO("BSP_EVENT_KEY:%d",event);LEDandBUZZset(true);break;}
}

button的定义如下:
在这里插入图片描述
在这里插入图片描述


#define BUTTON_1       9//13
#define BUTTON_2       30//14#define BSP_BUTTON_0   BUTTON_1
#define BSP_BUTTON_1   BUTTON_2static const app_button_cfg_t app_buttons[BUTTONS_NUMBER] =
{#ifdef BSP_BUTTON_0{BSP_BUTTON_0, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_0#ifdef BSP_BUTTON_1{BSP_BUTTON_1, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_1#ifdef BSP_BUTTON_2{BSP_BUTTON_2, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_2#ifdef BSP_BUTTON_3{BSP_BUTTON_3, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_3#ifdef BSP_BUTTON_4{BSP_BUTTON_4, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_4#ifdef BSP_BUTTON_5{BSP_BUTTON_5, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_5#ifdef BSP_BUTTON_6{BSP_BUTTON_6, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_6#ifdef BSP_BUTTON_7{BSP_BUTTON_7, false, BUTTON_PULL, bsp_button_event_handler},#endif // BUTTON_7};

这里测试到一个问题,明明我的GPIO9定义为BSP_BUTTON_0,为啥上报事件为BSP_EVENT_KEY_2,继续往下看advertising_buttons_configure函数中这样关联BSP_EVENT_KEY_2和BTN_ID_REQ:

#define BTN_ID_REQ                0//2  
#define BTN_ID_UPDATE_ADV         1//3  err_code = bsp_event_to_button_action_assign(BTN_ID_REQ,BSP_BUTTON_ACTION_PUSH,BSP_EVENT_KEY_2);
uint32_t bsp_event_to_button_action_assign(uint32_t button, bsp_button_action_t action, bsp_event_t event)

其实转了一圈后发现BTN_ID_REQ也是ID,Nordic就是这样一个定义转来转去!由上面的代码可以看到把BTN_ID_REQ(和BUTTON_1有关系)的BSP_BUTTON_ACTION_PUSH事件和BSP_EVENT_KEY_2关联了,所以在bsp_event_handler函数中可以直接用BSP_EVENT_KEY_2来判断是BUTTON_1的单机事件!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com