声明:本人跟随b站江科大学习,本文章是观看完视频后的一些个人总结和经验分享,也同时为了方便日后的复习,如果有错误请各位大佬指出,如果对你有帮助可以点个赞小小鼓励一下,本文章建议配合原视频使用❤️
如果你也正在学习STM32可以订阅本专栏,后续将不定期更新( ˘ ³˘)❤️
如有侵权,请私信联系删除
文章目录
- 前言
- 理论部分
- 1.PWR简介
- 2.PWR框图
- 3.上电复位和掉电复位
- 4.可编程电压检测器PVD
- 5.低功耗模式
- 模式选择
- 睡眠模式
- 停止模式
- 待机模式
- 省电情况对比
前言
- 该部分代码主要是修改标准库自带的时钟函数,就不做代码演示
- 知识较为简单,一般除了需要做空闲时间较长的项目很少用到,建议需要用到时候再看
理论部分
1.PWR简介
- PWR低功耗模式主要的作用就是节省电量,比如说车钥匙这种,上电之后就会一直运行,但是其实大部分时间都是处于空闲状态没有使用,所以就有这个低功耗模式保证空闲状态时少消耗电量
- 保证有一定的唤醒电路,比如串口中断唤醒之类的,因为如果一直处于低功耗模式不唤醒那和断电没有什么区别
- 睡眠->停机->待机,依次关闭更多的硬件,更省电,但是唤醒越来越麻烦
- 只有外部中断可以唤醒停止模式,像RTC这种自带的中断是不行的
2.PWR框图
- 三个供电区域:VBAT供电,VDD供电,VDDA(VDD Analog)模拟部分供电,1.8V供电区域
- CPU,存储器外设没有与外界交流时都是以1.8V低电压运行,当交流时,就通过I/O电流转换到3.3V,待机电路则都是VDD3.3V供电
- VBAT是备用电源,低电压检测器控制使用VDD供电还是备用电源供电
3.上电复位和掉电复位
这个图的意思是当VDD或者VDDA电压过低时会直接产生复位,产生复位的触发条件类似于施密特触发器,也就是高于上限阈值执行操作或者低于下限阈值执行操作,这里的上限阈值是POR(Power On Reset),下线阈值是PDR(Power Down Reset),这样设计是为了防止数据在40mv上下抖动而一直复位,POR和PDR的值可以看表,表如下:
下降沿也就是阈值下限,典型值为1.88V,上升沿也就是阈值上限,典型值为1.92V,差值就是40mV
4.可编程电压检测器PVD
- PVD阈值可自定义调节,可选范围在2.2V到2.9V左右,上下限之间的迟滞电压是100mV,在上升沿或者下降沿触发中断提醒程序进行适当的处理
5.低功耗模式
- 睡眠模式只需要调用WFI(Wait For Interrupt)或者WFE(Wait For Event)就能够进入,WFI唤醒只需要有中断就行,无论是外部中断还是自带的外设中断都行,唤醒后会进入中断函数,WFE只需要将外部中断配置为事件模式就行(或者使能中断不配置NVIC,这样唤醒后就是在睡眠的地方继续运行),这样唤醒后就不会进入中断函数而是处理事件
- 进入低功耗模式之后会有两种操作一种是关闭时钟,一种是关闭电源,关闭电源更省电,电压调节器控制着1.8V电压区,如果关闭则断开1.8V的供电,数据会丢失,开始和低功耗都不会断开供电,
- PDDS等于0进入停机模式,等于1进入待机模式
- SLEEPDEEP置1才是停机或者待机模式
- LPDS用于控制电压调节器,LPDS=0开启电压调节器,=1进入低功耗模式,开启更耗电但是唤醒更快,低功耗耗电少但是唤醒慢
- 停机模式唤醒需要外部中断
- 待机模式由于关闭了电源所以数据会丢失
模式选择
睡眠模式
- GPIO在睡眠时任然保持原状态,比如在点灯后睡眠了,那么睡眠时灯任然是亮的
- 唤醒后从暂停位置继续运行
停止模式
- GPIO在停止时任然保持原状态,比如在点灯后停止了,那么停止时灯任然是亮的
- 唤醒后从暂停位置继续运行
- 停止模式时72MHZ时钟会被关闭,但是重新唤醒之后72MHZ的HSE并不会直接开启,而是默认使用8MHZ的HSI,所以唤醒之后第一件事就是要开启HSE,也就是再次调用一次SystemInit这个函数
待机模式
省电情况对比
相同电量的情况下,待机比停机差不多耐用10倍,停机比睡眠差不多耐用1000倍
具体参数看图如下: