标签: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以下了(因为再小,表不能测了。)
标签:style 图片 ali content 直接 span 操作 运行 技术
原文地址:https://www.cnblogs.com/gaolab/p/9537696.html