当前位置: 首页 > >

STM32F103---PWR电源管理笔记

发布时间:

控制功耗?>电源管理

1.1电源监视器
在stm32芯片内部,用于检测VDD的电压,以实现复位功能和紧急掉电功能

1.上电复位和掉电复位(POR与PDR)
当检测到VDD的电压低于阈值VPOR及VPDR时, 芯片自动保持在复位状态;
电压低于VPOR(约1.92V)--->保持在上电复位状态(POR)--(电压持续上升至大于VPOR )->芯片开始正常运行--(电压下降至低于VPDR(约1.88V))->进入掉电复位状态(PDR);
2.可编程电压检测器PVD
STM32提供,也是实时检测 VDD电压;
电压低于编程的VPVD阈值(可通过电源控制寄存器PWR_CSR设置)--->向内核产生一个PVD中断(EXTI16线中断)==》使内核在复位前进行紧急处理;
使用PVD可配置8个等级。

1.2 STM32的电源系统
STM32的电源系统主要分为备份域电路、内核电路以及ADC电路三部分;



(1)ADC电源及参考电压(VDDA供电区域)
ADC的独立的电源接口,方便单独滤波,提高转换精度。工作电源使用VDDA引脚输入,VSSA作为独立的地连接,VRED引脚为ADC提供测量使用的参考电压。


(2)调压器供电电路(VDD/1.8V供电区域)
在 STM32 的电源系统中调压器供电的电路是最主要的部分;
调压器为备份域及待机电路以外的所有数字电路供电,其中包括内核、数字外设以及 RAM,调压器的输出电压约为 1.8V,因而使用调压器供电的这些电路区域被称为 1.8V 域。
调压器可以运行在“运行模式”、“停止模式”以及“待机模式”。
在运行模式下, 1.8V 域全功率运行;
在停止模式下 1.8V 域运行在低功耗状态, 1.8V 区域的所有时钟都被关闭,相应的外设都停止了工作,但它会保留内核寄存器以及SRAM 的内容;
在待机模式下,整个 1.8V 域都断电,该区域的内核寄存器及SRAM 内容都会丢失(备份区域的寄存器不受影响)。


(3)备份域电路(后备供电区域)
STM32 的 LSE 振荡器、 RTC 及备份寄存器这些器件被包含进备份域电路中;
可以通过VBAT引脚获取供电电源,实际应用中一般使用3V的纽扣电池供电;
有一个电源开关结构,它的功能类似双二极管。仅当VDD掉电时,备份域电路由纽扣电池通过VBAT供电,保证电路持续运行,以此保留关键数据。

1.3 STM32的功耗模式
功耗由高到低:运行-》睡眠-》停止-》待机
上电复位后STM32处于运行状态时,当内核不需要继续运行,可选择进后三种低功耗模式:

1.睡眠模式
仅关闭内核时钟,内核停止运行,但片上外设、CM3核心的外设还照常运行;
两种方式进入睡眠模式:等待“中断”唤醒(WFI)和由“事件”唤醒(WFE)
睡眠模式的各种特性:
立即睡眠(执行WFI或WFE指令时立即进入睡眠模式);
退出时睡眠(退出优先级最低的中断服务程序后才进入睡眠模式);
进入方式(1.内核寄存器的SLEEPDEEP=0,然后调用WFI或WFE指令即可进入睡眠模式;2.内核寄存器的SLLEPONEXIT=0时,进入“立即睡眠”;3.SLEEPONEXIT=0,进入“退出时睡眠”);
唤醒方式(使用WFI指令睡眠--->任意中断唤醒;使用WFE指令睡眠--->由事件唤醒);
睡眠时(关闭内核时钟,内核停止;外设正常运行,不再执行新的代码;此状态会保留睡眠前的内核寄存器、内存的数据);
无唤醒延迟;
唤醒后(由中断唤醒--->先进入中断,退出后接着执行WFI指令后程序;由事件唤醒--->直接接着执行WFE后的程序)

2. 停止模式
进一步关闭其它所有时钟,因此所有外设停止工作。但是1.8区域的部分电源未关闭,还保留了内核的寄存器、内存的信息--->唤醒后仍可以在停止处继续执行代码。
可以由任意一个外部中断(EXTI)唤醒。
在此模式中可以选择电压调节器为开模式或低功耗模式。
停止模式的各种特性:
调压器低功耗模式(停止模式下调压器可工作在正常模式或低功耗模式);
进入方式(内核处理器的SLEEPDEEP=1,PWR_CR寄存器中的PDDS=0,然后调用WFI或WFE指令即可进入停止模式;PWR_CR寄存器的LPDS=0时,调压器工作在正常模式,LPDS=1时工作在低功耗模式);
唤醒方式(使用WFI指令睡眠--->使用任意EXTI线的中断唤醒;使用WFE指令睡眠--->使用任意配置为事件模式的EXTI线事件唤醒);
停止时(内核停止,片上外设也停止。这个状态会保留停止前的内核寄存器、内存的数据);
唤醒延迟(基础延迟为HSI振荡器的启动时间,若调压器工作在低功耗模式,还需加上调压器切换至正常模式下的时间);
唤醒后(由中断唤醒--->先进入中断,退出后接着执行WFI指令后的程序;由事件唤醒--->直接接着执行WFE后的程序。PS:唤醒后,STM3会使用HSI作为系统时钟);

3.待机模式
进一步把1.8V区域的电源也关闭了==》在此模式唤醒后,只能对芯片复位,重新检测boot条件,从头开始执行程序。
四种唤醒方式:WKUP(PA0)引脚的上升沿、RTC闹钟事件、NRST引脚的复位、IWDG(独立看门狗)复位。
待机模式的各种特性:
进入方式(SLEEPDEEP=1,PWR_CR寄存器中的PDDS=1和唤醒状态位WUP=0,然后调用WFI或WFE指令);
唤醒方式(WKUP引脚的上升沿, RTC 闹钟、唤醒、入侵、时间戳事件或NRST 引脚外部复位及 IWDG 复位);
待机时(内核停止,片上外设也停止;内核寄存器、内存的数据会丢失;除复位引脚、 RTC_AF1 引脚及 WKUP 引脚,其它 I/O口均工作在高阻态。);
唤醒延迟(芯片复位的时间);
唤醒后(相当于芯片复位,从头开始执行代码)


?
电源管理相关的库函数及命令

2.1 配置PVD监控功能
阈值等级直接使用库函数PWR_PVDLevelConfig配置
2.2 WFI与WFE命令
使用函数的格式“__WFI();”和“__WFE();”来调用
2.3 进入停止模式
进入停止模式需要在调用指令前设置一些寄存器位,stm32标准库把这部分操作封装到PWR_EnterSTOPMode函数中。
2.4 进入待机模式
在调用PWR_EnterSTANDBYMode函数前还需要清除 WUF 寄存器位;
调用__force_stores函数是为了确保存储操作完毕后再调用 WFI/WFE 指令,从而进入待机模式。


?学*《【野火?】零死角玩转STM32?F103指南者》的笔记



友情链接: