低功耗模式

电源控制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引脚上。
电源监测
  1. 上电复位(POR)/掉电复位(PDR)
    在这里插入图片描述
  • 上电时,当VDD低于VPOR阈值时,系统无需外部复位电路便会保持复位模式。一旦
    VDD 电源电压高于 VPOR 阈值,系统便会退出复位状态,芯片正常工作。
  • 掉电时,当VDD低于VPDR阈值时,系统就会保持复位模式。
    注意:POR 与 PDR 的复位电压阈值是固定的,VPOR 阈值(典型值)为 1.92V,VPDR 阈值(典型值)为 1.88V。
  1. 可编程电压检测器(PVD)
    用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS[2:0]位进行比较来监控电源,这几位选择监控电压的阀值。
    通过设置PVDE位来使能PVD。
    电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀值。该事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急关闭任务。
    在这里插入图片描述
    在这里插入图片描述
电源管理

stm32正常工作中,有四种工作模式:运行模式、睡眠模式、停止模式、待机模式。

  1. 低功耗模式
    在系统或电源复位以后,微控制器处于运行状态。当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)来开关各个外设模块的时钟。
    在这里插入图片描述
  1. 睡眠模式
    在这里插入图片描述
    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节)将会指示内核由待机状态退出。
    在这里插入图片描述
  1. 寄存器
  • 电源控制寄存器(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)通过按下按键触发外部中断唤醒睡眠模式

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值