PWR简介

项目内容
主要功能管理STM32内部的电源供电部分,实现可编程电压监测器和低功耗模式
可编程电压监测器(PVD)监控VDD电源电压,当VDD下降到PVD阈值以下或上升到PVD阈值之上时,触发中断执行紧急关闭任务
低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时降低STM32的功耗,延长设备使用时间

低功耗模式

模式进入唤醒对1.8V区域时钟的影响对VDD区域时钟的影响电压调节器
睡眠模式(SLEEP-NOW或SLEEP-ON-EXIT)WFI任一中断CPU时钟关闭,对其他时钟和ADC时钟无影响无开
停机PDDS=0位 + SLEEPDEEP位 + WFI或WFE外部中断(在外部中断事件寄存器中设置)关闭所有1.8V域的时钟HSI和HSSE的振荡器关闭开启或处于低功耗模式(依据电源控制寄存器(PWR_CR)的设定)
待机PDDS=1位 + SLEEPDEEP位 + WFI或WFEWKUP引脚的上升沿、RTC闹钟事件、NRST引脚上的外部复位、IWDG复位关闭所有1.8V域的时钟HSI和HSSE的振荡器关闭关

PWR使用方法

操作函数说明
开启PWR时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE)使能PWR模块时钟
允许备份访问PWR_BackupAccessCmd(ENABLE)允许访问BKP寄存器
进入低功耗模式PWR_EnterSTANDBYMode()进入待机模式,可由RTC闹钟唤醒
清除唤醒标志PWR_ClearFlag(PWR_FLAG_WU)清除唤醒标志位

模式选择

text
执行WFI/WFE
    ├── SLEEPDEEP=0
    │   └── 睡眠模式
    │       ├── SLEEPONEXIT=0
    │       │   └── 睡眠模式(立刻睡眠)
    │       └── SLEEPONEXIT=1
    │           └── 睡眠模式(等待中断退出)
    └── SLEEPDEEP=1
        └── 深度睡眠模式(停机/待机)
            ├── PDDS=0
            │   └── 停机模式
            │       ├── LPDS=0
            │       │   └── 停机模式(电压调节器开启)
            │       └── LPDS=1
            │           └── 停机模式(电压调节器低功耗)
            └── PDDS=1
                └── 待机模式

三种模式

text
低功耗模式
    ├── 睡眠模式
    │   ├── 进入方式:执行WFI/WFE指令
    │   ├── 唤醒后:从暂停处继续运行
    │   ├── 特点:
    │   │   ├── SLEEPONEXIT位决定进入时机
    │   │   ├── I/O引脚保持运行模式状态
    │   │   └── 功耗较低
    │   └── 唤醒源:
    │       ├── WFI:任意NVIC响应的中断
    │       └── WFE:唤醒事件
    ├── 停止模式
    │   ├── 进入方式:执行WFI/WFE指令
    │   ├── 唤醒后:从暂停处继续运行
    │   ├── 特点:
    │   │   ├── 1.8V区域时钟停止
    │   │   ├── SRAM和寄存器内容保留
    │   │   ├── I/O引脚保持运行模式状态
    │   │   └── 功耗比睡眠模式低
    │   └── 唤醒源:
    │       ├── WFI:任意EXTI中断
    │       └── WFE:任意EXTI事件
    └── 待机模式
        ├── 进入方式:执行WFI/WFE指令
        ├── 唤醒后:从头开始运行
        ├── 特点:
        │   ├── 1.8V区域断电
        │   ├── 只有备份寄存器和待机电路供电
        │   ├── I/O引脚变为高阻态
        │   └── 功耗最低
        └── 唤醒源:
            ├── WKUP引脚的上升沿
            ├── RTC闹钟事件的上升沿
            ├── NRST引脚上外部复位
            └── IWDG复位