nordic蓝牙协议栈初始化卡死的问题

把应用程序从sdk15.0迁移到15.3的过程中,出现一个问题。代码全部移植完之后,编译通过。在运行的时候每次都卡死在使能协议栈的函数里面。

ret_code_t nrf_sdh_enable_request(void)
{
    ......

    nrf_clock_lf_cfg_t const clock_lf_cfg =
    {
        .source       = NRF_SDH_CLOCK_LF_SRC,
        .rc_ctiv      = NRF_SDH_CLOCK_LF_RC_CTIV,
        .rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV,
        .accuracy     = NRF_SDH_CLOCK_LF_ACCURACY
    };

    CRITICAL_REGION_ENTER();
#ifdef ANT_LICENSE_KEY
    ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler, ANT_LICENSE_KEY);
#else
    //经调试发现每次都卡死在这个函数
    ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler);
#endif
    ......
}

后面查资料得知,协议栈使用内部的低速时钟,而15.3版本的sdk默认配置的是外部高速时钟,这就导致蓝牙协议栈无法工作。

修改的方案为:

将如下代码

// <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
发布了12 篇原创文章 · 获赞 5 · 访问量 2459

猜你喜欢

转载自blog.csdn.net/chengbaojin/article/details/103778150
今日推荐