【STM32F4】电源控制器(PWR)工作原理详解
1. PWR简介
PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。
2. 电源概述
器件的工作电压 (VDD) 要求介于 1.8 V 到 3.6 V 之间。嵌入式线性调压器用于提供内部 1.2 V 数字电源。
当主电源 VDD 断电时,可通过 VBAT 电压为实时时钟 (RTC)、RTC 备份寄存器和备份 SRAM (BKP SRAM) 供电。
为了方便进行电源管理,STM32把它的外设、内核等模块跟据功能划分了供电区域,其内部电源区域划分见图STM32的电源系统。
2.1 电池备份域
STM32的LSE振荡器、RTC、备份寄存器及备份SRAM这些器件被包含进备份域电路中,这部分的电路可以通过STM32的VBAT引脚获取供电电源,在实际应用中一般会使用3V的钮扣电池对该引脚供电。
在图中备份域电路的左侧有一个电源开关结构,它的功能类似图双二极管结构中的双二极管,在它的上方连接了VBAT电源,下方连接了VDD主电源(一般为3.3V),右侧引出到备份域电路中。当VDD主电源存在时,由于VDD电压较高,备份域电路通过VDD供电,当VDD掉电时,备份域电路由钮扣电池通过VBAT供电,保证电路能持续运行,从而可利用它保留关键数据。
2.2 调压器供电电路
在 STM32 的电源系统中调压器供电的电路是最主要的部分,调压器为备份域及待机电路以外的所有数字电路供电,其中包括内核、数字外设以及 RAM,调压器的输出电压约为 1.2V,因而使用调压器供电的这些电路区域被称为 1.2V 域。
根据应用模式的不同,可采用三种不同的模式工作。
- 运行模式:调压器为 1.2 V 域(内核、存储器和数字外设)提供全功率。在此模式下, 调压器的输出电压(约 1.2 V)可通过软件调整为不同的电压值,器件运行在最高工作频率时,电压缩放特性可使功耗得到优化。
- 停止模式:调压器为 1.2 V 域提供低功率,保留寄存器和内部 SRAM 中的内容。
- 待机模式:调压器掉电。除待机电路和备份域外,寄存器和 SRAM 的内容都将丢失。
2.3 独立 A/D 转换器电源和参考电压
为了提高转换精度,ADC 配有独立电源,可以单独滤波并屏蔽 PCB 上的噪声。
- ADC 电源电压从单独的 VDDA 引脚输入。
- VSSA 引脚提供了独立的电源接地连接。
为了确保测量低电压时具有更高的精度,用户可以在 VREF 上连接单独的 ADC 外部参考电压 输入。VREF 电压介于 1.8 V 到 VDDA 之间。
3. 电源监控器
STM32芯片主要通过引脚VDD从外部获取电源,在它的内部具有电源监控器用于检测VDD的电压,以实现复位功能及掉电紧急处理功能,保证系统可靠地运行。
3.1 上电复位与掉电复位(POR与PDR)
当检测到VDD的电压低于阈值VPOR及VPDR时,无需外部电路辅助,STM32芯片会自动保持在复位状态,防止因电压不足强行工作而带来严重的后果。见图POR与PDR,在刚开始电压低于VPOR时(约1.72V),STM32保持在上电复位状态(POR,PowerOnReset),当VDD电压持续上升至大于VPOR时,芯片开始正常运行,而在芯片正常运行的时候,当检测到VDD电压下降至低于VPDR阈值(约1.68V),会进入掉电复位状态(PDR,PowerDownReset)。
3.2 欠压复位 (BOR)
上电期间,欠压复位 (BOR) 将使器件保持复位状态,直到电源电压达到指定的 VBOR 阈值。VBOR 通过器件选项字节进行配置。BOR 默认为关闭。可以选择 4 个 VBOR 阈值。
- BOR 关闭 (VBOR0):1.80 V 到 2.10 V 电压范围的复位阈值级别。
- BOR 级别 1 (VBOR1):2.10 V 到 2.40 V 电压范围的复位阈值级别。
- BOR 级别 2 (VBOR2):2.40 V 到 2.70 V 电压范围的复位阈值级别。
- BOR 级别 3 (VBOR3):2.70 V 到 3.60 V 电压范围的复位阈值级别。
当电源电压 (VDD) 降至所选 VBOR 阈值以下时,将使器件复位。
通过对器件选项字节进行编程可以禁止 BOR。要禁止 BOR 功能,VDD 必须高于 VBOR0,以启动器件选项字节编程序列。那么就只能由 PDR 监测掉电过程。
BOR 阈值滞回电压约为 100 mV(电源电压的上升沿与下降沿之间)。
4. 可编程电压检测器 (PVD)
可以使用 PVD 监视 VDD 电源,将其与STM32的PWR 电源控制寄存器 (PWR_CR) 和用于STM32F42xxx 和 STM32F43xxx 的 PWR 电源控
制寄存器 (PWR_CR) 中 PLS[2:0] 位所选的阈值进行比较。
通过设置 PVDE 位来使能 PVD。
PWR 电源控制/状态寄存器 (PWR_CSR) 中提供了 PVDO 标志,用于指示 VDD 是大于还是 小于 PVD 阈值。该事件内部连接到 EXTI 线 16,如果通过 EXTI 寄存器使能,则可以产生中 断。当 VDD 降至 PVD 阈值以下以及/或者当 VDD 升至 PVD 阈值以上时,可以产生 PVD 输 出中断,具体取决于 EXTI 线 16 上升沿/下降沿的配置。该功能的用处之一就是可以在中断 服务程序中执行紧急关闭系统的任务。
4 低功耗模式
默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU 通过 HCLK 提供时钟,并执行程序代码。系统提供了多个低功耗模式,可在 CPU 不需要运行时 (例如等待外部事件时)节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、
短启动时间和可用唤醒源之间寻求最佳平衡。
器件有三个低功耗模式:
● 睡眠模式(Cortex™-M4F 内核停止,外设保持运行)
● 停止模式(所有时钟都停止)
● 待机模式(1.2 V 域断电)
此外,可通过下列方法之一降低运行模式的功耗:
● 降低系统时钟速度。
● 不使用 APBx 和 AHBx 外设时,将对应的外设时钟关闭。
4.1 睡眠模式
1. 进入睡眠模式
执行 WFI(等待中断)或 WFE(等待事件)指令即可进入睡眠模式。根据 Cortex™-M4F 系 统控制寄存器中 SLEEPONEXIT 位的设置,可以通过两种方案选择睡眠模式进入机制:
● 立即休眠:如果 SLEEPONEXIT 位清零,MCU 将在执行 WFI 或 WFE 指令时立即进入 睡眠模式。
● 退出时休眠:如果 SLEEPONEXIT 位置 1,MCU 将在退出优先级最低的 ISR 时立即进
入睡眠模式。
2. 退出睡眠模式
如果使用 WFI 指令进入睡眠模式,则嵌套向量中断控制器 (NVIC) 确认的任意外设中断都会 将器件从睡眠模式唤醒。如果使用 WFE 指令进入睡眠模式,MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可 通过以下方式产生:
● 在外设的控制寄存器使能一个中断,但不在 NVIC 中使能,同时使能 Cortex™-M4F 系统控制寄存器中的 SEVONPEND 位。当 MCU 从 WFE 恢复时,需要清除相应外设的中断挂起位和外设 NVIC 中断通道挂起位(在 NVIC 中断清除挂起寄存器中)。
● 配置一个外部或内部 EXTI 线为事件模式。当 CPU 从 WFE 恢复时,因为对应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或 NVIC 中断通道挂起位。由于没有在进入/退出中断时浪费时间,此模式下的唤醒时间最短。
4.2 停止模式
停止模式基于 Cortex™-M4F 深度睡眠模式与外设时钟门控。调压器既可以配置为正常模 式,也可以配置为低功耗模式。在停止模式下,1.2 V 域中的所有时钟都会停止,PLL、HSI 和 HSE RC 振荡器也被禁止。内部 SRAM 和寄存器内容将保留。将 PWR_CR 寄存器中的 FPDS 位置 1 后,Flash 还会在器件进入停止模式时进入掉电状态。Flash 处于掉电模式时,将器件从停止模式唤醒将需要额外的启动延时。
要进一步降低停止模式的功耗,可将内部调压器设置为低功耗模式。通过用于STM32F405xx/07xx 和 STM32F415xx/17xx 的 PWR 电源控制寄存器 (PWR_CR) 和用于STM32F42xxx 和 STM32F43xxx 的 PWR 电源控制寄存器 (PWR_CR) 的 LPDS 位进行配置。如果正在执行 Flash 编程,停止模式的进入将延迟到存储器访问结束后执行。如果正在访问 APB 域,停止模式的进入则延迟到 APB 访问结束后执行
在停止模式下,可以通过对各控制位进行编程来选择以下功能:
● 独立的看门狗 (IWDG):IWDG 通过写入其密钥寄存器或使用硬件选项来启动。而且一 旦启动便无法停止,除非复位。请参见第 18 节:独立看门狗 (IWDG) 中的第 18.3 节。
● 实时时钟 (RTC):通过 RCC 备份域控制寄存器 (RCC_BDCR) 中的 RTCEN 位进行配置。
● 内部 RC 振荡器 (LSI RC):通过 RCC 时钟控制和状态寄存器 (RCC_CSR) 中的 LSION 位进行配置。
● 外部 32.768 kHz 振荡器 (LSE OSC):通过 RCC 备份域控制寄存器 (RCC_BDCR) 中的 LSEON 位进行配置。
**注意:**在停止模式下,ADC 或 DAC 也会产生功耗,除非在进入停止模式前将其禁止。要禁止这些 转换器,必须将 ADC_CR2 寄存器中的 ADON 位和 DAC_CR 寄存器中的 ENx 位都清零。
4.1.1 退出停止模式
通过发出中断或唤醒事件退出停止模式时,将选择 HSI RC 振荡器作为系统时钟。当调压器在低功耗模式下工作时,将器件从停止模式唤醒将需要额外的延时。在停止模式下一直开启内部调压器虽然可以缩短启动时间,但功耗却增大。
5.1 待机模式
待机模式下可达到最低功耗。待机模式基于 Cortex™-M4F 深度睡眠模式,其中调压器被禁 止。因此 1.2 V 域断电。PLL、HSI 振荡器和 HSE 振荡器也将关闭。除备份域(RTC 寄存 器、RTC 备份寄存器和备份 SRAM)和待机电路中的寄存器外,SRAM 和寄存器内容都将
丢失(参见图 7)。
5.1.1 进入待机模式
在待机模式下,可以通过对各控制位进行编程来选择以下功能:
● 独立的看门狗 (IWDG):IWDG 通过写入其密钥寄存器或使用硬件选项来启动。而且一 旦启动便无法停止,除非复位。请参见第 18 节:独立看门狗 (IWDG) 中的第 18.3 节。
● 实时时钟 (RTC):通过备份域控制寄存器 (RCC_BDCR) 中的 RTCEN 位进行配置。
● 内部 RC 振荡器 (LSI RC):通过控制/状态寄存器 (RCC_CSR) 中的 LSION 位进行配置。
● 外部 32.768 kHz 振荡器 (LSE OSC):通过备份域控制寄存器 (RCC_BDCR) 中的 LSEON位进行配置。
5.1.2 退出待机模式
检测到外部复位(NRST 引脚)、IWDG 复位、WKUP 引脚上升沿、RTC 闹钟、入侵事件或时间戳时间时,微控制器退出待机模式。从待机模式唤醒后,除 PWR 电源控制/状态寄存 器 (PWR_CSR) 外,所有寄存器都将复位。
从待机模式唤醒后,程序将按照复位(启动引脚采样、复位向量已获取等)后的方式重新执行。PWR 电源控制/状态寄存器 (PWR_CSR) 中的 SBF 状态标志指示 MCU 已处于待机模式。
5.1.3 待机模式下的 I/O 状态
在待机模式下,除以下各部分以外,所有 I/O 引脚都处于高阻态:
● 复位引脚(仍可用)。
● RTC_AF1 引脚 (PC13)(如果针对入侵、时间戳、RTC 闹钟输出或 RTC 时钟校准输出进行了配置)。
● WKUP 引脚 (PA0)(如果使能)。
5.1.4 调试模式
默认情况下,如果使用调试功能时应用程序将 MCU 置于停止模式或待机模式,调试连接将 中断。这是因为 Cortex™-M4F 内核时钟停止了。不过,通过设置 DBGMCU_CR 寄存器中的一些配置位,即使 MCU 进入低功耗模式,仍可使用软件对其进行调试。有关详细信息,请参见:对低功耗模式的调试支持。