datasheet

STM32开发笔记24:STM32L0低功耗设计

2019-07-13来源: eefocus关键字:STM32  STM32L0  低功耗

    这几篇日志将详细记录,自己应用stm32进行低功耗设计的全过程。


    使用芯片:STM32L053R8T6


    运行模式:


        Range 1:电源电压限制在1.71-3.6V,CPU最大运行频率为32MHz。


        Range 2:CPU最大运行频率为16MHz。


        Range 3:CPU最大运行频率4.2MHz


    低功耗模式:


        Sleep mode(睡眠模式)、Low-power run mode(低功耗运行模式)、Low-power sleep mode(低功耗睡眠模式)、Stop mode with RTC(带有RTC的停止模式)、Stop mode without RTC(不带RTC的停止模式)、Standby mode with RTC(带有RTC的旁路模式)、Standby mode without RTC(不带RTC的旁路模式)。


        在上述这些模式中功耗依次降低,具体值为:


            Sleep mode:37uA/MHz


            Low-power run mode:8uA


            Low-power sleep mode:4.5uA


            Stop mode with RTC:1uA


            Stop mode without RTC:0.4uA VDD=3.0V


            Standby mode with RTC:0.85uA VDD=3.0V


            Standby mode without RTC:0.29uA VDD=3.0V


        在上述这些模式中,使用时应注意以下几点:


            1、睡眠模式,在所有外设全部关闭的条件下,16MHz时,电流为1mA左右,这个数值相对自身的项目来说还是有些大;


            2、低功耗运行模式和低功耗睡眠模式,都限制了CPU的最大运行速度,如果CPU需要一直工作选择,该模式是比较合适的;


            3、停止模式,电流比较低,唤醒的方法也比较多;


            4、旁路模式,里面的RAM中的数据全部丢失,相当于复位重启。


        综上所述,停止模式是比较适合大部分项目的,我现在着手于选择停止模式,还完成后续的项目设计工作。


    Stop mode without RTC


        在停止模式时,RAM和寄存器中的数据全部保留。所有的时钟全部停止,包括PLL、MSI RC、HSI、LSI RC、HSE和LSE 。下图是我项目中用到的时钟的基本情况,仅使用了HSE和PLL。


      

        在stop运行模式时,一些具有唤醒功能的外设,当探索到唤醒条件时,能够使能HSI RC时钟。


        在stop运行模式时,电压稳压器处于低功耗模式。任何外部中断先,在3.5us的时间内即可唤醒器件,处理器将处理中断程序或执行后续代码。在STM32中,任何一个GPIO都可以设置为外部中断源,也就是说可以使用任何一个引脚的电平变化,来唤醒CPU。CPU也可以被USB/USART/I2C/LPUART/LPTIMER唤醒。


        在本项目中,我希望使用USART或者LPUART进行唤醒,在现阶段USART已经调通。


    项目结构


        项目的大体结构为:12V给线路板供电,使用DCDC稳压到5V给无线传输模块供电,使用低压差线性稳压芯片稳压为3.3V给STM32L053R8T6供电。无线模块与STM32采用串口连接,平时STM32进入stop模式,当有无线模块发送过来的数据时,唤醒STM32。


    当前功耗


        下面记录一下现阶段的功耗情况,后面慢慢加入。


        只焊接DCDC:232.7uA,此处说明DCDC在空载的情况下,功耗还是比较大的,我的项目限制于12V供电,所以没有太好的方法。如果不需要高电压,建议采用锂电池直接供电,这部分功耗就生下来了。


        DCDC两端加大电容:230uA,焊接电容后,由于仍然是空载状态,所以电路电流的下降是一个缓慢的过程,这和给电容的充电曲线是相符合的,最后停留在230uA左右,比不加电容还低3uA,这说明增加电容,可以增加DCDC的转换效率。


        简单程序正常运行:4.3mA,程序除了初始化相应的外设外,不进行任何逻辑操作。


        STM32处于STOP模式:236uA,板子上只有一个低压差的稳压芯片,没有焊接其它外设。


        STM32处于STOP模式(焊接无线模块):233uA,这个挺神奇的,当然我这个模块还没有进行软件设置,可是电已经供上了,表有问题?


关键字:STM32  STM32L0  低功耗

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic467662.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32中的i2c协议编程
下一篇:STM32低功耗状态的引脚配置

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32开发笔记71: 解决FreeRTOS任务的内存分配问题

单片机型号:STM32F091RCT6在使用FreeRTOS进行程序设计时,遇到任务不能运行的问题,具体程序如下: DebugOutput("启动USB通讯线程...rnrn"); osThreadDef(usbTask, StartUsbTask, osPriorityNormal, 0, 128); usbTaskHandle = osThreadCreate(osThread(usbTask), NULL); DebugOutput("启动雷达红外通讯线程...rnrn"); osThreadDef(irdaTask, St
发表于 2019-07-13

STM32开发笔记72: 使用命名空间解决类名冲突问题

单片机型号:STM32L053R8T6在程序设计中,使用了两个类,这两个类都有引脚定义并同名,程序如下:#ifndef E32_400T20S_H_#define E32_400T20S_H_ #include "io.h"#include "mini_uart.h" #ifdef __cplusplusextern "C"{ class CM0:public CIO_Output{public: CM0(void);}; class CM1:public CIO_Output{public: CM1(void);}; 
发表于 2019-07-13

STM32开发笔记73: C++中子类调用父类同名函数的处理方法

单片机型号:STM32L053R8T61、问题父类有1方法:Enable_RS485,如下所示:class CUart{public: uint8_t u8_UartNumber; //端口号1-8 uint32_t u32_BaudRate; //波特率 uint8_t u8_Parity; //效验位 CC0 C0; //485控制引脚C0 CC1 C1; //485控制引脚C1 UART_HandleTypeDef hUART; uint8_t u8_UartReceiveBuffer[1];public: CUart(uint8_t
发表于 2019-07-13

STM32开发笔记74: STM32L0低功耗唤醒后的时钟选择

本文介绍STM32L0系列单片机低功耗唤醒后的时钟选择。参看已有的低功耗例程,发现都使能了HSI时钟,一致没有深究其中的具体原因,今天把它搞明白了,现记录如下:先看一下,使能低功耗的函数:void CTarget::EnableLowPower(void){ HAL_PWREx_EnableUltraLowPower(); HAL_PWREx_EnableFastWakeUp(); __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); DisableAllIO();}第1句使能超低功耗,第2句使能快速唤醒,第3句选择唤醒后的主始终,第4句将所有IO引脚设置为低功耗状态
发表于 2019-07-13

STM32开发笔记75: 使用STM32CubeMX点亮一个LED

今天调试在自己的程序框架下调试RTC始终不成功,只要初始化RTC就进入死机状态。现在重温一下STM32CubeMX的使用方法,看STM32CubeMX生成的程序是否有RTC初始化不成功的问题。本日志从工程的建立讲到点亮一个LED。1、启动STM32CubeMX,我现在使用的版本是5.2.1。2、File-New Project,选择相应的芯片类型。3、双击相应的芯片类型后,进入配置界面。进行SYS配置,选中Debug Serial Wire,由于我习惯于使用FreeRTOS所以在我的项目中Timebase Source都选择定时器。4、进行RCC设置。5、时钟设置如下:6、在芯片引脚图中,将连接LED的引脚设置
发表于 2019-07-13
STM32开发笔记75: 使用STM32CubeMX点亮一个LED

STM32开发笔记76: 初始化RTC后死机的原因

项目开发中只要初始化RTC,则系统死机。其初始化步骤可参考日志:STM32开发笔记44:RTC驱动程序的移植。按照日志STM32开发笔记75: 使用STM32CubeMX点亮一个LED使用STM32CubeMX直接生成程序则运行正常。分析原因在于,少移植了2个函数:HAL_RTC_MspInit和HAL_RTC_MspDeInit。这两个函数的实现非常简单,可以靠STM32CubeMX直接生成。void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc){  __HAL_RCC_RTC_ENABLE();   HAL_NVIC_SetPriority(RTC_IRQn
发表于 2019-07-13

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved