STM32--实测STM32L0低功耗停机(stop)模式-1.5uA(RTC开启+外部中断唤醒)

一、知识普及

   STM32L0休眠模式:(3.0V供电)

  •  低速运行190uA/MHz
  •  6μA低功耗运行模式,32kHz运行频率
  •  3.2 μA低功耗睡眠模式,一个计时器工作
  •  0.8 μA 停机模式:实时时钟(RTC)运行,保存上下文,保留RAM内容
  •  0.3 μA 停机模式:无实时时钟运行,保存上下文,保留RAM内容
  •  270nA待机模式:无实时时钟运行,保存后备寄存器

STM32--实测STM32L0低功耗停机(stop)模式-1.5uA(RTC开启+外部中断唤醒)_第1张图片 

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

STM32--实测STM32L0低功耗停机(stop)模式-1.5uA(RTC开启+外部中断唤醒)_第2张图片

五、测试代码下载

gitlab:https://gitee.com/schuck/cola_os

girhub:https://github.com/sckuck-bit/cola_os

你可能感兴趣的:(STM32)