实验目的
本章学习STM32的低功耗控制,掌握如何进入低功耗状态以及如何从此状态唤醒,数据手册请参看第四章电源控制PWR中的内容
实验简介
现在很多MCU都有低功耗控制,当需要系统省电时,就需要进入适当的低功耗模式来降低系统的功耗,尤其当MCU用在电池供电的设备上时,低功耗尤为重要,下面我们介绍STM32的3种低功耗以及唤醒条件。
睡眠模式:进入睡眠模式时,内核时钟停止,从睡眠模式中恢复不需要任何特殊的序列,但要重新使能ARM内核的时钟。在睡眠模式下,指令的执行被中止直至复位或中断出现。外设在CPU内核处于睡眠模式期间继续运行,并可产生中断使处理器恢复执行指令。睡眠模式下,处理器内核自身,存储器系统,有关控制器及内部总线停止工作,因此这些器件的动态功耗会降低,只要出现任何使能的中断,CPU内核就会从睡眠模式中唤醒。
停止模式:在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的所有时钟都被停止,PLL,HSI,和 HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。在停止模式下,所有I/O引脚都保持他们在运行模式时的状态。
停止模式进入和退出
待机模式:待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断开。PLL ,HSI 和 HSE 振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。
待机模式的进入和退出
这三种模式最低功耗的是待机模式,其只需要2uA左右的电流,停机模式是次低功耗的,其典型的电流消耗在20uA左右。最后就是睡眠模式了。
代码
待机模式
main.c
#include "MyIncludes.h"
u16 sys_cnt = 0;
void systick_isr(void)
{
if(sys_cnt <100)
sys_cnt++;
else
{
sys_cnt = 0;
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4|GPIO_PIN_5);
}
}
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__GPIOC_CLK_ENABLE();
//使能c时钟
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_3 ;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//输入
GPIO_In