概述
nrf52832的电源管理有两种模式: System OFF 、System ON。
芯片上电后默认是System ON 模式,此模式下可以关闭CPU而让外设继续保持工作。
产品需要利用按键进行开关机,功能实现比较简单,在开机界面按下按键关机休眠,休眠状态下,按下按键开机(可以重启),因此未对程序进行现场保护等操作。
1、上电初始化:
在初始化程序中加入电源控制初始化函数 power_management_init(); // 初始化电源控制
static void power_management_init(void)
{
ret_code_t err_code;
err_code = nrf_pwr_mgmt_init(); //该函数位于nrf_pwr_mgmt.c
APP_ERROR_CHECK(err_code);
}
2、进入休眠(关机)函数:
void Power_OFF(void)
{
BUZZER_ON; //开蜂鸣器
McuWaitMs(600);
BUZZER_OFF; //关蜂鸣器
LCD_shutdown(); //关LCD
//需要根据实际情况关闭一些影响功耗的外设
nrf_gpio_pin_set(LED_1); //灭LED
nrf_gpio_pin_set(LED_2);
Close_GPIO_Pin (); //根据实际情况调整IO口电平,控制功耗
app_timer_stop_all(); //关闭所有定时器
sleep_flag = true; //置休眠标志
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();
#if ((NRF_LOG_ENABLED ==0) && (NRF_LOG_BACKEND_SERIAL_USES_RTT == 0))
//避开Debug的时候进行check err
APP_ERROR_CHECK(err_code);
#endif
}
这里有一个细节,如果系统在Debug(RTT打开)模式下,调用sd_power_system_off()将会返回NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN。这往往会导致check_err_code报错导致系统复位无法进入低功耗状态。
在实际使用时也可以根据使能标志规避报错。参考 https://zhuanlan.zhihu.com/p/111188942
3、唤醒引脚配置
uint32_t bsp_btn_ble_sleep_mode_prepare(void)
{
uint32_t err_code;
err_code = bsp_wakeup_button_enable(BTN_ID_WAKEUP); // BTN_ID_WAKEUP = 5 ,BUTTON_6引脚设置为唤醒引脚
RETURN_ON_ERROR_NOT_NOT_SUPPORTED(err_code);
// err_code = bsp_wakeup_button_enable(BTN_ID_WAKEUP_BOND_DELETE);
// RETURN_ON_ERROR_NOT_NOT_SUPPORTED(err_code);
return NRF_SUCCESS;
}
以上做完,休眠后居然还有327uA电流,得空继续查找原因。
最后
以上就是调皮棒球为你收集整理的nRF52832 低功耗调试经验的全部内容,希望文章能够帮你解决nRF52832 低功耗调试经验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复