前言:第一次實現按鍵進入NRF52832 system off 低功耗模式調試時遇到遇到一些問題,經過一番折騰,最終還是一步步解決,其中一些問題是參考一些博主大佬的,但是一些問題確實找到答案,特將實現過程記錄之,望路過大神不吝賜教。
功能描述:筆者主要想實現NRF52832通過微動開關長按進入低功耗模式,再次按鍵實現喚醒功能。
遇到的問題及解決
1、CSDN上的大神關於NRF52832 system off問題基本都是調用sd_power_system_off();系統復位的問題,這個主要是EasyDMA引起。具體參考該博客
2、我所遇到的其中一個坑不是1中的問題,貼上SDK中sleep_mode_enter代碼說明
static void sleep_mode_enter(void)
{
ret_code_t err_code;
err_code = bsp_indication_set(BSP_INDICATE_IDLE);
APP_ERROR_CHECK(err_code);
// Prepare wakeup buttons.
err_code = bsp_btn_ble_sleep_mode_prepare();
APP_ERROR_CHECK(err_code);
// Go to system-off mode (this function will not return; wakeup will cause a reset).
err_code = sd_power_system_off();
APP_ERROR_CHECK(err_code);
}
造成重啓原因:Go to system-off mode (this function will not return; wakeup will cause a reset). 這個是sdk中調用sd_power_system_off旁邊的註釋,我直接忽略了,調了sd_power_system_off,後進行APP_ERROR_CHECK(err_code); 回報錯,正確的是應該把APP_ERROR_CHECK(err_code);註釋掉
3、另外一個個坑:我使用按鍵觸發,檢測按鍵長按觸發system_off,但是忘記進system_off禁止掉gpiote導致鬆手又觸發按鍵中斷,所以重啓了。這是另外一個坑,解決辦法:我在長按釋放時再進入system_off就沒有這個問題了。當然最好的體驗是觸發長按後進入並且使gpio不再中斷,同時又要不影響喚醒,這個是一直有點小困惑的地方,怎麼改寫都沒實現,需要路過大神賜教。