三 stm32低功耗模式

前言

在做很多产品的时候,功耗是必须要考虑的一项因素,一定程度上决定了你的产品是否有竞争力,降低功耗可以从硬件上和软件上进行处理,而软件上进入低功耗模式是降功耗很有效的一项措施。这里对stm32的三种低功耗模式进行介绍,下图是参考手册的简介。
三 stm32低功耗模式

Standby待机模式

简述

该模式是三种低功耗模式中功耗最低的一种,最低2ua,类似于软件复位,每次唤醒后程序都要重头开始,保存的一些变量也会丢失。该模式是在CORTEX-M3深睡眠模式时关闭电压调节器,整个1.8V供电区域被断电,PLL,HSI,HSE振荡器也被断电,SRAM和寄存器内容丢失,只有备份寄存器和待机电路维持供电。该模式对实时采集不好用。

代码实现

进入待机模式

在以下条件下执行WFI(等待中断)或WFE(等待事件)指令:
设置cortex-M3系统控制寄存器中的SLEEPDEEP位
设置电源控制寄存器(PWR_CR)中的PDDS位
清除电源控制/状态寄存器(PWR_CSR)中的WUF位置

/**
  * 使能WAKE_UP引脚
  * @brief  Enables or disables the WakeUp Pin functionality.
  * @param  NewState: new state of the WakeUp Pin functionality.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void PWR_WakeUpPinCmd(FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  *(__IO uint32_t *) CSR_EWUP_BB = (uint32_t)NewState;
}

/**
  * @brief  Enters STANDBY mode.
  * @param  None
  * @retval None
  */
void PWR_EnterSTANDBYMode(void)
{
  /* Clear Wake-up flag */
  PWR->CR |= PWR_CR_CWUF;
  /* Select STANDBY mode */
  PWR->CR |= PWR_CR_PDDS;
  /* Set SLEEPDEEP bit of Cortex System Control Register */
  SCB->SCR |= SCB_SCR_SLEEPDEEP;
/* This option is used to ensure that store operations are completed */
#if defined ( __CC_ARM   )
  __force_stores();
#endif
  /* Request Wait For Interrupt */
  __WFI();
}

待机模式唤醒

1.WKUP引脚上升沿唤醒
2.RTC闹钟
3.NRST引脚上外部复位 异步复位脚
4.IWDG复位

说明:单片机在进入待机模式时程序停止运行,中断程序也不会,WAKEUP引脚不需要配置,只需要给一个上升沿就能唤醒

Stop停止模式

1.简述
所有时钟均关闭,但是停机模式下唤醒时钟默认没经过倍频的,可能需要
重新配置。停止模式和待机模式的差别在于电压调节器的开关,待机模式关电压调节器,停止模式开启或者处于低功耗模式
2.唤醒
只能通过外部中断唤醒

Sleep睡眠模式

适用于等待外设的中断或事件,降低系统的功耗,用户可以在进入睡眠模式之前关闭不工作的外设时钟,以此节省功耗。