zoukankan      html  css  js  c++  java
  • 无线路灯项目——STM32L低功耗相关

    1.STM32L主要特性
      影响功耗的两大要素,一个是电压,一个是频率
      
    2.高效的处理
      如果仅考虑处理功耗的话,用mA/DMIPS来表达,M3的核会比其他16位架构的MCU要好(这里感觉指的主要就是其竞争对手的MSP430)
      NOTE中提到一种典型的应用:便携式健康医疗设备,设备可运行在4MHZ的时钟下,这时的核电压只需最低的1.2V,外部电压最低可至1.65V
    这里写图片描述

    3.多种低功耗模式
    这里写图片描述
    相对于STM32F系列,L系列多了low power run和low power sleep两种模式
    为了降低功耗,可以使用最低的主时钟,MSI

    4.低功耗外设
      其中有一些外设是为低功耗定制的,比如STM32L1xx中有一个12bit,1MSps的ADC,如果这个ADC一直工作的话,会严重降低设备的续航,这个ADC典型的电流是1.45mA。ADC的启动时间是3.5us,转换一次的时间是1us,那么一次开机且转换6次的时间不超过10us,ADC的关闭是立即的。像这样一次开机转换6次的动作,我们执行的频率是1KHZ,那么平均下来,ADC的电流功耗是10.5uA(以上的ADC参数仅是大概地举个例子,具体的还是要看芯片的Datasheet)
      在高速时钟的系统中,外设的开启和关闭的时间是可以忽略的,但是在低速的低功耗系统中,这个时间是不能忽略的。例如在一个1MHZ的系统中,一个指令的执行时间就相当于1MSps ADC的采样时间了。如果ADC在这种低速的情况下工作,要达到高采样速率,是达不到的,对后续的DSP造成影响。为此,ST对ADC设计成这样:不管Core的频率是多少,ADC的时钟都是内部16MHZ的时钟,是它最高的时钟。即使在一个32KHZ的系统中,一个指令的长度是30us,那么ADC在30us内也可以完成多次转换,得到多个采样值,后续可完成DSP,若只需采样一次的话,只需花费30us内的4.5us。
      以下三个外设在STOP模式依然可以工作:
      1.两个比较器,可以组成一个窗口电压比较,3uA
      2.RTC,可以做成闹钟,1uA
      3.LCD控制器,5uA(不包括LCD功耗)

    5.时钟系统
    STM32L1提供了5种时钟。
    两个外部时钟(高精度,高功耗,额外成本):
    ●HSE(high-speed external crystal),4-24MHZ
    ●LSE(low-speed external crystal),32.768KHZ
    三个内部时钟(低精度,低功耗,不需额外成本):
    ●HSI(high-speed internal RC oscillator),16MHZ
    ●MSI(high-speed external RC oscillator),64KHZ-4MHZ
    ●LSI(high-speed external RC),37KHZ

    下表是5种时钟的特性总结:
    这里写图片描述
    其中MSI可由LSE来校正精度,最终可至0.5%
    主时钟可由HSE、HSI、MSI这三种时钟提供

    下面以进入Low power sleep mode为例子

        // RCC 时钟系统重启
        RCC_DeInit();
    
        /* Flash 0 wait state */
        FLASH_SetLatency(FLASH_Latency_0);
    
        /* Disable Prefetch Buffer */
        FLASH_PrefetchBufferCmd(DISABLE);    
    
        /* Disable 64-bit access */
        FLASH_ReadAccess64Cmd(DISABLE);
    
        /* Enable the PWR APB1 Clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
    
        /* Select the Voltage Range 2 (1.5V) */
        PWR_VoltageScalingConfig(PWR_VoltageScaling_Range2);
    
        /* Wait Until the Voltage Regulator is ready */
        while(PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET)
        {}
    
        /* HCLK = SYSCLK = 262.144KHz */
        RCC_HCLKConfig(RCC_SYSCLK_Div1);
    
        /* PCLK2 = HCLK */
        RCC_PCLK2Config(RCC_HCLK_Div1);
    
        /* PCLK1 = HCLK */
        RCC_PCLK1Config(RCC_HCLK_Div1);
    
        /* Set MSI clock range to 262.144KHz */
        RCC_MSIRangeConfig(RCC_MSIRange_2);
    
        /* Select MSI as system clock source */
        RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);
    
        /* Wait till PLL is used as system clock source */
        while (RCC_GetSYSCLKSource() != 0x00)
        {} 
    
        /* Enable The ultra Low Power Mode */
        PWR_UltraLowPowerCmd(ENABLE);
    
        /* Enable the power down mode during Sleep mode */
        FLASH_SLEEPPowerDownCmd(ENABLE);
    
        /* Request to enter SLEEP mode with regulator in low power mode */
        PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI);

    【Reference】
    RM0038:Reference manual
    AN3193:STM32L1xx ultralow power features overview
    http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1295/LN962/PF251642?s_searchtype=partnumber#

  • 相关阅读:
    【xsy2479】counting 生成函数+多项式快速幂
    【 2019北京集训测试赛(十)】 子矩阵 二分
    【2019北京集训测试赛(七)】 操作 分治+FFT+生成函数
    Python 导出项目依赖/导出所有安装模块/打包数据
    数据结构与算法 介绍以及常见的算法排序
    爬虫 scrapy框架
    爬虫 开发者工具详解
    爬虫 selenium+Xpath 爬取动态js页面元素内容
    爬虫 解析库re,Beautifulsoup,
    爬虫 requests模块的其他用法 抽屉网线程池回调爬取+保存实例,gihub登陆实例
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713504.html
Copyright © 2011-2022 走看看