码迷,mamicode.com
首页 > 其他好文 > 详细

STM32F0系列——停机模式(低功耗)

时间:2018-08-26 18:25:26      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:style   图片   ali   content   直接   span   操作   运行   技术   

这段时间正在磨一个项目,要求系统中STM32F0系列的芯片不工作时处于一个低功耗,要用几个月,所以需要研究下stm32F0的低功耗模式。

经过了解,STM32F0芯片与其他STM32F1系列一样,有休眠(Sleep)、停机(Stop)和待机(Standby)三个模式,相应的功耗如下图。可见,休眠模式由于程序和绝大部分功能还在工作,所以低功耗效果并不是很明显。停机模式和待机模式的低功耗效果拔群,故在该两种中进行取舍,待机模式的待机电流仅2uA,但是仅能被WKUP管脚和RST(复位管脚)唤醒,唤醒后所有东西均需要重新初始化。而停机模式就比较中庸,它的功耗电流是一个范围,是由所需要保留的功能而决定,可以被中断和事件唤醒。

技术分享图片

由于电路上需要两路中断分别对单片机进行唤醒,所以选择停机(stop)模式,并且调节器是低功耗模式,仅可被中断,这样尽量降低需要的耗电资源,将功耗降到最低。

进入停机模式

这里我们直接调用官方的函数库stm32f0_pwr.c的函数即可。函数包括两个部分,一部分是开启芯片电源管理的时钟,另一部分是就是进入停机模式,停机模式还有两个选择模式,一个是调节器电压,可选常规或低压,低压在停机模式下功耗会更低,但是唤醒响应速度会慢一些;令一个唤醒方式的选择,可选事件唤醒、外部IO口中断唤醒或者两者均可。

//开启芯片电源管理的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
//进入停止(stop)模式,选择低压调节器(这样启动会慢一些,当然功耗会更低),启用外部中断唤醒。  
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

 

退出停机模式

通过事件或外部中断唤醒后,主程序会继续运行在“PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);”函数后的指令,此外,芯片的系统时钟需要重新进行初始化。

其它

为了保证低功耗,在进入停机模式之前,我们还会做一些事情,将外部的功能芯片设置为低功耗模式,将ADC关闭,将一些不使用的IO口设置为模拟输入(据说这样功耗最低),待到唤醒之后重新进行功能初始化操作。

现在产品在调整以后,功耗在10uA以下了(因为再小,表不能测了。)

STM32F0系列——停机模式(低功耗)

标签:style   图片   ali   content   直接   span   操作   运行   技术   

原文地址:https://www.cnblogs.com/gaolab/p/9537696.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!