- sleep模式 这个模式的功耗跟主时钟的频率正相关,测试时要保证所有端口不浮空,有模拟输入功能的GPIO要设置为模拟输入,没有模拟输入功能的IO口要设置为输出模式,上拉到高电平。
- stop模式 这个模式的功耗跟主时钟频率没有关系,IO口设置与睡眠模式一样,设置完IO口后disable GPIO的 时钟,关闭滴答定时器,关闭所有中断,关闭SWJ调试口。记住进入stop模式后,再下载程序时会出现内部错误,所以必须留给自己一点下载时间,先delay,再进stop模式。
__HAL_AFIO_REMAP_SWJ_NOJTAG();
HAL_SuspendTick();
__disable_irq();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE);
或者
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFE);
PWR_MAINREGULATOR_ON的功耗会比PWR_LOWPOWERREGULATOR_ON的稍微高一些。
- standby模式 这个模式有最低的功耗,其他设置与stop模式一样。记住进入standby模式后,再下载程序时会出现内部错误,所以必须留给自己一点下载时间,先delay,再进standby模式。
__HAL_AFIO_REMAP_SWJ_NOJTAG();
HAL_SuspendTick();
__disable_irq();
HAL_PWR_EnterSTANDBYMode();
- 如此设置以后,测出来的功耗与stm32手册上的差不多。IO口的设置非常重要,IO浮空的话会增加100uA左右的电流