一、知识普及
STM32L0休眠模式:(3.0V供电)
- 低速运行190uA/MHz
- 6μA低功耗运行模式,32kHz运行频率
- 3.2 μA低功耗睡眠模式,一个计时器工作
- 0.8 μA 停机模式:实时时钟(RTC)运行,保存上下文,保留RAM内容
- 0.3 μA 停机模式:无实时时钟运行,保存上下文,保留RAM内容
- 270nA待机模式:无实时时钟运行,保存后备寄存器
可见STM32L0的休眠功耗很低,可以根据自己的需求选择相应的工作模式 。
二、实际测试
1.测试硬件:STM32L053C8T6最小系统板
2.万用表:普通万用表
3.供电电压3.3V
三、代码实现
void board_sleep_init(void)
{
MX_RTC_Init();
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnableBkUpAccess();
HAL_PWR_DisablePVD();
HAL_PWREx_EnableUltraLowPower();
HAL_PWREx_EnableFastWakeUp();
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);
}
void board_enter_sleep(uint16_t time)
{
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOH_CLK_DISABLE();
HAL_PWREx_EnableUltraLowPower(); //使能超低功耗
HAL_PWREx_EnableFastWakeUp(); //使能快速唤醒
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
// 若需要在低功耗模式下调试程序,可以打开此函数
HAL_DBGMCU_DBG_DisableLowPowerConfig(DBGMCU_SLEEP | DBGMCU_STOP | DBGMCU_STANDBY);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // 清除唤醒标志
//HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814 ?时钟选择1Hz ?65535/60/60 ~18 ?可得到的唤醒时间为 1s 到 18h 左右
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);
/* Enter Stop Mode */
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
board_exit_sleep();
}
四、测试结果
最终测试结果:1.5uA,这个结果比数据手册要高一些,跟供电电压和万用表有关。
五、测试代码下载