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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章