电源控制PWR
电源系统:VDDA供电区域、VDD供电区域、1.8V 供电区域、后备供电区域。
电源监控:POR/PDR 监控器、PVD 监控器。
电源管理:低功耗模式。
电源系统
STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。
①独立的A/D转换器供电和参考电压
为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰。
- ADC的电源引脚为VDDA
- 独立的电源地VSSA
100脚和144脚封装:
为了确保输入为低压时获得更好精度,用户可以连接一个独立的外部参考电压ADC到VREF+和VREF-脚上。在VREF+的电压范围为2.4V~VDDA。
64脚或更少封装:
没有VREF+和VREF-引脚,他们在芯片内部与ADC的电源(VDDA)和地(VSSA)相联。
② 电压调节器(VDD /1.8V 供电区域)
电压调节器是stm32电源系统中最核心的部分;VDD供电区域来自于VDD和VSS,给IO电路以及待机电路供电,电压调节器主要为备份区域、内核、数字外设、RAM,调节器的输出电压约1.8V。
复位后调节器总是使能的。根据应用方式它以3种不同的模式工作。 - 运转模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设)。
- 停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。
- 待机模式:调节器停止供电。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失。
③ 电池备份区域(后备供电区域)
使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。
VBAT脚也为RTC、LSE振荡器和PC13至PC15供电,这保证当主要电源被切断时RTC能继续工作。切换到VBAT供电由复位模块中的掉电复位功能控制。
如果应用中没有使用外部电池,VBAT必须连接到VDD引脚上。
电源监测
- 上电复位(POR)/掉电复位(PDR)
- 上电时,当VDD低于VPOR阈值时,系统无需外部复位电路便会保持复位模式。一旦
VDD 电源电压高于 VPOR 阈值,系统便会退出复位状态,芯片正常工作。 - 掉电时,当VDD低于VPDR阈值时,系统就会保持复位模式。
注意:POR 与 PDR 的复位电压阈值是固定的,VPOR 阈值(典型值)为 1.92V,VPDR 阈值(典型值)为 1.88V。
- 可编程电压检测器(PVD)
用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS[2:0]位进行比较来监控电源,这几位选择监控电压的阀值。
通过设置PVDE位来使能PVD。
电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀值。该事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急关闭任务。
电源管理
stm32正常工作中,有四种工作模式:运行模式、睡眠模式、停止模式、待机模式。
- 低功耗模式
在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。
STM32F10xxx有三种低功耗模式:
- 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)
- 停止模式(所有的时钟都已停止)
- 待机模式(1.8V电源关闭)
此外,在运行模式下,可以通过以下方式中的一种降低功耗: - 降低系统时钟
在运行模式下,通过对预分频寄存器进行编程,可以降低任意一个系统时钟(SYSCLK、HCLK、PCLK1、PCLK2)的速度。进入睡眠模式前,也可以利用预分频器来降低外设的时钟。时钟配置寄存器(RCC_CFGR) - 关闭APB和AHB总线上未被使用的外设时钟。
在运行模式下,任何时候都可以通过停止为外设和内存提供时钟(HCLK和PCLKx)来减少功耗。为了在睡眠模式下更多地减少功耗,可在执行WFI或WFE指令前关闭所有外设的时钟。通过设置 AHB 外设时钟使能寄存器 (RCC_AHBENR) 、 APB2 外设时钟使能寄存器(RCC_APB2ENR)和APB1外设时钟使能寄存器(RCC_APB1ENR)来开关各个外设模块的时钟。
- 睡眠模式
2)停止模式
停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLL、HSI和HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。
在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。
- 进入停止模式:
在停止模式下,通过设置电源控制寄存器(PWR_CR)的LPDS位使内部调节器进入低功耗模式,能够降低更多的功耗。
如果正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。
如果正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。
可以通过对独立的控制位进行编程,可选择以下功能:- 独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。
- 实时时钟(RTC):通过备份域控制寄存器 (RCC_BDCR)的RTCEN位来设置。
- 内部RC振荡器(LSI RC):通过控制/状态寄存器 (RCC_CSR)的LSION位来设置。
- 外部32.768kHz振荡器(LSE):通过备份域控制寄存器 (RCC_BDCR)的LSEON位设置。
在停止模式下,如果在进入该模式前ADC和DAC没有被关闭,那么这些外设仍然消耗电流。通过设置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位为0可关闭这2个外设。
- 退出停止模式:
当一个中断或唤醒事件导致退出停止模式时,HSI RC振荡器被选为系统时钟。
当电压调节器处于低功耗模式下,当系统从停止模式退出时,将会有一段额外的启动延时。如果在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗会增加。
3)待机模式
待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。 - 进入待机模式
可以通过设置独立的控制位,选择以下待机模式的功能:- 独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。
- 实时时钟(RTC):通过备用区域控制寄存器(RCC_BDCR)的RTCEN位来设置。
- 内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)的LSION位来设置。
- 外部32.768kHz振荡器(LSE):通过备用区域控制寄存器(RCC_BDCR)的LSEON位设置。
- 退出待机模式
从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等)。电源控制/状态寄存器(PWR_CSR)(见第4.4.2节)将会指示内核由待机状态退出。
- 寄存器
- 电源控制寄存器(PWR_CR)
- 电源控制/状态寄存器(PWR_CSR)
与标准的APB读相比,读此寄存器需要额外的APB周期
void HAL_PWR_ConfigPVD (PWR_PVDTypeDef *sConfigPVD);//用于初始化 PWR。
void HAL_PWR_EnterSLEEPMode (uint32_t Regulator, uint8_t SLEEPEntry);//用于设置 CPU 进入睡眠模式。
void HAL_PWR_EnterSTOPMode (uint32_t Regulator, uint8_t STOPEntry);//用于设置 CPU 进入停止模式。
void HAL_PWR_EnableWakeUpPin (uint32_t WakeUpPinPolarity);//用于使能唤醒引脚。
void HAL_PWR_DisableWakeUpPin (uint32_t WakeUpPinPolarity);//禁止某个唤醒引脚使用的函数
void HAL_PWR_EnterSTANDBYMode (void);//用于使 CPU 进入待机模式
PVD电压监测配置步骤:
1)配置 PVD,使能 PVD 时钟。
调用 HAL_PWR_ConfigPVD 函数配置 PVD,包括检测电压级别、使用中断线触发方式等。
2)使能 PVD 检测,配置 PVD 中断优先级,开启 PVD 中断。
通过 HAL_PWR_EnablePVD 函数使能 PVD 检测。
通过 HAL_NVIC_EnableIRQ 函数使能 PVD 中断。
通过 HAL_NVIC_SetPriority 函数设置中断优先级。
3)编写中断服务函数。
PVD 中断服务函数为 PVD _IRQHandler,当发生中断的时候,程序就会执行中断服务函数。
睡眠模式配置步骤:
1)配置唤醒睡眠模式的方式
通过一个按键作为中断触发源,需要配置一个IO口,使能时钟、外部中断模式、中断优先级等。
2)进入 CPU 睡眠模式
通过 HAL_PWR_EnterSLEEPMode 函数进入睡眠模式。
3)通过按下按键触发外部中断唤醒睡眠模式
停止模式配置步骤:
1)配置唤醒停止模式的方式
通过一个按键作为中断触发源,需要配置一个IO口,使能时钟、外部中断模式、中断优先级等。
2)进入 CPU 停止模式
通过 HAL_PWR_EnterSTOPMode 函数进入停止模式。
3)通过按下按键触发外部中断唤醒停止模式
待机模式配置步骤:
1)进入 CPU 待机模式
PWR 时 钟 的 初 始 化 , 用__HAL_RCC_PWR_CLK_ENABLE 函数实现。
通过 HAL_PWR_EnableWakeUpPin 函数使能 WKUP 的唤醒功能。
通过__HAL_PWR_CLEAR_FLAG 函数清除唤醒标记。
通过 HAL_PWR_EnterSTANDBYMode 函数进入待机模式。
2)通过按下按键触发外部中断唤醒睡眠模式