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