PWR 里standby MODE 和 RTC关系

    刚接触PWR的内容,使用手册说的不太能让我好理解。其实当你弄懂了以后再回去看使用手册还是能找到的,只是写的过于简略,对于初学者很多地方理解不到位。

 

    这个小总结完全从初学者角度,目的只有一个:进入/唤醒 PWR的standby模式。其实更多的是如何配置进入,唤醒基本上是配置好了后自动完成或硬件出发的,我们需要做的退出后的设计。这块内容暂不作为本次讨论内容。

 

一 低功耗模式简介

NVIC  和 PWR 各寄存器状态决定三种低功耗模式:
PWR 里standby MODE 和 RTC关系_第1张图片
 

 

低功耗模式一览表

 


PWR 里standby MODE 和 RTC关系_第2张图片
 PS: STM32F的NRST是异步复位脚。
         当NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KB的SRAM。
         当NRST从低电平变高时,PC指针从0地址开始。
         但是复位的时候不会将STM32F片内RTC的寄存器以及后备存储器重置,因为它们是用电池通过专门的VBAT脚供电。
          STM32中的NRST有施密特功能。大概在输入电压低于1.9V的时候将芯片复位。

 

这里重点说standby模式

 


PWR 里standby MODE 和 RTC关系_第3张图片
 

设置stm32 进入standby模式需要

 

1 PWR配置

   a-- RCC配置时候开启 PWR、BKP时钟

         /* Enable PWR and BKP clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

 

   b-- 允许 PWR唤醒

           /* Enable WKUP pin */
         PWR_WakeUpPinCmd(ENABLE);

 

    c-- 允许 进入备份域 (为什么需要这样,下文详解)

           /* Allow access to BKP Domain */
         PWR_BackupAccessCmd(ENABLE);

 

2 进入中断

      PWR_EnterSTANDBYMode();

 

这一句话完成了表7里  standby MODE  "操作"  的内容

void PWR_EnterSTANDBYMode(void)
{
  /* Clear Wake-up flag */

   PWR->CR |= CR_CWUF_Set;

 

  /* Select STANDBY mode */ ----PDDS位
  PWR->CR |= CR_PDDS_Set;

 

  /* Set SLEEPDEEP bit of Cortex System Control Register */ ----sleepdeep位
  *(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;

 

  /* Request Wait For Interrupt */
  __WFI(); ----wfi

}

 

 

从standby 模式唤醒

 表7、表11中都可知从standby 模式中唤醒的方式有四种

    RTC闹钟

    WKUP引脚上升沿

    NRST上引脚外部复位

    IWDG 复位

 

下图解释了我最初的不明白---RTC 和standby什么联系

 
PWR 里standby MODE 和 RTC关系_第4张图片
 

 

 


PWR 里standby MODE 和 RTC关系_第5张图片
 
 

你可能感兴趣的:(stm32,standby,pwr)