一、知识普及
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,这个结果比数据手册要高一些,跟供电电压和万用表有关。
|