STM32 PWR电源控制

在这里插入图片描述
PWR负责管理STM32内部的电源部分,这些是设计硬件电路需要考虑的,暂时不涉及程序。
涉及程序的内容主要是两个,一个是可编程电压监测器,另一个是低功耗模式。这个功能的预想场景是:使用电池供电,或者对安全要求比较高的设备,如果电压逐渐下降,在电压过低的情况下,可能会导致内部或者外部电路发生不确定的错误。为了避免不确定因素,在电压低于设定的阈值时,我们PVD主动提前发出警告,关闭比较危险的设备,

像一些电池供电的设备,对空闲时候的耗电量有极大的要求,比如数据采集设备,车钥匙、遥控器、报警器等等。这些产品都有特点,在他们的生命周期里,绝大部分时间,都是空闲状态,单片机程序一旦开始,程序永远都不会停下来,所以主程序的最后,一般都是一个死循环,即使需要空闲,让程序停下来,那也得来个空循环让程序一直转圈卡住。但是程序运行就会耗电,空循环的耗电量也是很大的,如果不用它,程序一直空循环,那用不到几天,电池就没电了,所以需要低功耗模式,在空闲状态,关闭不必要的硬件,比如直接把CPU断电,或者关闭时钟,那程序就自然不会运行了。
但是在低功耗模式下,也要保留必要的唤醒电路,比如串口接收数据的中断唤醒,外部中断唤醒,RTC闹钟唤醒等等,STM32能够立刻重新投入工作,这样才行,STM32一睡不行那就和断电没区别了,
所以低功耗模式要考虑:关闭哪些硬件,保留哪些硬件,以及如何去唤醒。

电源框图:
这一块由两部分组成,左边部分是VDD供电区域,,右边部分是VDD通过电压调节器,降压到1.8V,1.8V包括CPU核心,存储器和内置数字外设,可以看出,STM32内部大部分关键电路,cpu核心,存储器和外设,都是以1.8V的低电压运行的,主要目的是降低功耗,电压越低,内部电路运行的功耗就相对越低,,当这些外设需要于外界进行交流时,
而待机电路,唤醒逻辑等,属于VDD供电区域,

VBAT后备供电区域,包括LSE 32K晶体振荡器,后备寄存器,RCC BDCR寄存器(备份域控制寄存器)和RTC,

上电复位和掉电复位,还有可编程电压检测器,快速了解一下即可。

当VDD或者VDDA电压过低时,让STM32复位住,不要乱操作,这个复位和不负位的界限之间,有个迟滞比较器,大于上线POR(Power On Reset)时解除复位,小于下限PDR(Power Down Reset)时复位。所以前面和后面,电压过低时,是复位的,中间电压正常的时候,不复位,那电压上限和下限,具体多少V,解除复位,还有滞后时间是多久,可以看数据手册。

PVD的区别是阈值电压可以使用程序指定,可以自定义调节,。PVD触发后,芯片还能正常工作,只是需要提醒电源电压过低,同时PVD的中断是通过外部中断来实现的。为什么要借道外部中断呢,因为低功耗模式设计的是只有外部中断可以唤醒停止模式,其他设备也想唤醒的画,就可以借道外部中断来实现,
外部中断中的USB和ETH,其实也都只有他们的weakup,唤醒信号结果来了,目的就是为了唤醒停止模式,

低功耗模式:
第二列是如何配置,才能进入我们想要的模式,第三列是对于这些模式,进入之后,如何去唤醒,也就是模式的退出,不希望让它一睡不醒,
最后三列:每种模式,对电路的操作,关闭了哪些东西,就是哪些电路不能用了,保留了哪些东西,就是哪些电路还是正常工作的,
低功耗模式的三种电路,从睡眠,停机,待机关闭的电路越来越多,也是越来越省电,越来越难唤醒,
WFI和WFE是内核的指令,对应库函数里,有对应的函数,其中WFI的意思是Wait For Interrupt,等待中断,如果有中断发生的画,再叫他起来,对应的唤醒条件是任一中断,调用WFI进入的睡眠模式,
WFE Wait For Event 等待事件 唤醒事件可以是外部中断配置为事件模式,也可以是使能了中断,但是没有配置NVIC,醒来之后,一般不需要进入中断函数,直接从睡的地方继续运行,
这就是WFI和WFE的作用,

关闭电路通常有两种做法:一个是关闭时钟,另一个是关闭电源。关闭时钟,所有的运算和涉及时序的操作都会暂停,但是寄存器和存储器里面保护的数据还可以维持,不会消失,。
关闭电源就是电路直接断电,电路的操作和数据都会直接丢失,所以关闭电源比关闭时钟更省电,

PDDS这一位是区分是待机模式,还是停机模式的,PDDS=1,进入待机模式,PDDS=0,进入停机模式。
LPDS1=1,电压调节器进入低功耗,

待机模式下,因为没有开电压调节器,意味着1.8V区域电源关闭,内部存储器和寄存器数据丢失,

模式选择中,这些寄存器,实际上库函数已经封装好了,但是还是需要理解。

数据手册和参考手册中,有各个模式的电流参数。

做产品之前,要仔细阅读手册,不要怪没告诉。

程序文件中,两个system文件,是用来配置系统时钟的,也就是配置RCC时钟数的,

默认设置,就是晶振接的8M,主频是72M,AHB和APB2是72M,APB1是36M,其实这些不是绝对的,可以修改。但是一般不要改,因为目前绝大多数程序都是按照默认的配置来写的。
如何配置RCC时钟树,请阅读system_stm32f10x.h文件说明
文件可读可写属性要记得进行修改才能编辑。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
void PWR_DeInit(void);
void PWR_BackupAccessCmd(FunctionalState NewState);
void PWR_PVDCmd(FunctionalState NewState);
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);
void PWR_WakeUpPinCmd(FunctionalState NewState);
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);
void PWR_EnterSTANDBYMode(void);
FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);
void PWR_ClearFlag(uint32_t PWR_FLAG);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值