STM32的低功耗模式共有三个:
- 睡眠模式-(sleep): 睡眠模式的功耗是mA级别,一般在实际应用中较少使用
- 停止模式-(stop): 停止模式的功耗为20uA,所有时钟关闭,寄存器不断电,依靠外部中断或RTC唤醒
- 待机模式-(standby):待机模式的功耗为2uA,TAMPER引脚不关断,通过WKUP引脚唤醒
在项目中综合选择了停止模式,在该模式下使用两种唤醒方式:
- WKUP引脚唤醒
- 串口唤醒
进入停止模式配置
为了尽可能的降低功耗,需要进行IO口的配置,防止它们处于浮空状态,增大电流。STM32在复位后的IO口默认处于浮空输入状态,因此一定要对它们进行配置。实际过程中发现,同一配置成模拟输入状态和分别配置成上拉输入或下拉输入的功耗相同。因此为了精简代码,可统一配置成模拟输入。
void DisablePeriph(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*PA*/ //模拟输入配置方法
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*PB*/ //上拉输入配置方法
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_SetBits(GPIOB,GPIO_Pin_All);
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*PC*/ //下拉输入配置方法
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_SetBits(GPIOB,GPIO_Pin_All)