×
单片机 > 单片机程序设计 > 详情

工作问题笔记-----STM32休眠问题

发布时间:2020-05-27 发布时间:
|

STM32低功耗分三种:


SLEEP: 电压调节器开启,Cortex-M3内核停止运行,外设保持运行态;


STOP: 电压调节器可选择性开启,所有外设时钟、PLL、HSI和HSE被关闭,Cortex-M3内核和所有外设停止运行,保留SRAM和寄存器的内容;


STANDBY: 待机模式Standby:电压调节器关闭、整个1.8v区域断电。除了备份区域和待机电路的寄存器以外,SRAM和寄存器的内容全部丢失。


 


在休眠状态下,MCU的代码并不会继续执行,而是进入休眠状态,等待唤醒,唤醒的过程会先执行IRQ中断服务函数,然后再执行WFI后的函数。


省电级别由低到高,standby休眠后会让我们的数据丢失,而SLEEP会被所有的中断唤醒,且省电级别并没有STOP高,STOP只能被所有的外部中断EXIT LINE唤醒,符合我们的ACC唤醒规则需求。因为STOP休眠状态下时钟、PLL、HSI、HSE等都会被关闭,因此,唤醒之后,需要重新对RCC进行配置,以保持MCU唤醒后外设的正常运行,因此,需要时钟的情况下STM32的休眠模式应该选用SLEEP而不是STOP,本人目前的需要是STOP休眠状态。一般情况下,为了更加省电,在允许的情况下,MCU休眠后,最好把GPIO口都断开,即DeInit。


PS:经过实践结果    发现103和030 两种STM32的型号在STOP模式下的唤醒有所区别  当103在STOP休眠时会被系统时钟中断唤醒,所以103在休眠前应当关闭系统时钟中断,而030却没有这个现象。


对比三种休眠模式的进入函数


值得注意的是,默认情况_WFI()可以让MCU进入SLEEP模式,但是,PWR_EnterSTOPMode函数会改变SCB_SysCtrl的SleepDeep位,因此如果是调用了PWR_EnterSTOPMode后,再用_WFI()的话,进入的并不是SLEEP模式,而是STOP模式。(此点由http://bbs.21ic.com/icview-136301-1-1.html处学习)

--------------------- 



关键字:工作问题  STM32  休眠问题 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法