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或WFE | WKUP引脚的上升沿、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) | 清除唤醒标志位 |
模式选择
执行WFI/WFE
├── SLEEPDEEP=0
│ └── 睡眠模式
│ ├── SLEEPONEXIT=0
│ │ └── 睡眠模式(立刻睡眠)
│ └── SLEEPONEXIT=1
│ └── 睡眠模式(等待中断退出)
└── SLEEPDEEP=1
└── 深度睡眠模式(停机/待机)
├── PDDS=0
│ └── 停机模式
│ ├── LPDS=0
│ │ └── 停机模式(电压调节器开启)
│ └── LPDS=1
│ └── 停机模式(电压调节器低功耗)
└── PDDS=1
└── 待机模式三种模式
低功耗模式
├── 睡眠模式
│ ├── 进入方式:执行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复位