这三种模式,从上到下,关闭的电路越来越多
对应地,从上到下,是越来越省电
同时,从上到下,也是越来越难唤醒的
睡得越深,关的越多,越省电,越难叫醒
其中WFl的意思是Wait For Interrupt,等待中断,先睡了,有中断的话再叫醒我,所以对应的唤醒条件是,任一中断
然后下面WFE,意思是WaitForEvent,等待事件,这个事件可以是外部中断配置为事件模式,也可以是使能了中断,但是没有配置NVIC。。。醒来之后,一般不需要进中断函数,直接从睡的地方继续运行
如何进入停机模式呢,首先SLEEPDEEP位设置为1,另外PDDS这一位,用来区分它是停机模式 ,还是下面的待机模式 ,PDDS=0,进入停机模式,PDDS=1,进入待机模式。所以要想进入停机模式,PDDS要事先设置为0,之后,LDS,用来设置最后这个电压调节器是开启,还是进入低功耗模式,LPDS=0,电压调节器开启,LPDS=1,电压调节器进入低功耗,最后,当我们把这些位提前设置好了,后再调用WF或者WFE,芯片就可以进入停止模式了
上-下==40mv---迟滞
PVD首先它这个阈值电压是可以使用程序指定的,可以自定义调节 ,另外,这个PVD的中断申请,是通过外部中断实现的。所以如果要使用PVD的话,记得要配置外部中断
因为低功耗模式设计的是,只有外部中断可以唤醒停止模式,其他这些设备,也想唤醒停止模式的话,就可以通过借道外部中断来奕现
第一行,SYSCLK,系统主频,是36MHz
,
第二行,我们让它以1s为周期显示,但现在奕际上是2s的周期,这是因为,系统主频,正常情况下是72MHz,现在我们降频到36MHz了,所以运行时间,就是原来的2倍解除注射,解锁配置系统的主频,文件默认72m
睡眠模式+串口的发送和接收
执行完,芯片进入睡眠,睡眠目的:如果STM32一直没收到数据,那这个主循环也会一直查询标志位,这是无意义的耗电操作。收到数据后,自动退出睡眠模式,执行一遍任务后,继续睡眠,这样在空闲时,芯片一直在睡眠,可以降低系统功耗
停止模式+对射红外计次
待机模式+实时时钟
退出停止模式时它并不会再自动帮我们开启PL和HSE,而是默认用HSI的8MHz,直接作为主频,所以如果你忽略了这个问题,就会出现,你程序刚上电,是72MHz的主频,但是进入停止模式,再唤醒之后,就变成8MHz的主频了。所以,我们一般在停止模式唤醒后,第一时间就是重新动HSE,配置主频为72MHz,我们只需要再调用一下Systemlnit就行