zoukankan      html  css  js  c++  java
  • [CortexM0--stm32f0308]Low Power Mode

    问题描写叙述

    stm32f0308正常是运行在Run mode下。这样的mode是在reset之后的默认模式。Low Power Mode。即低功耗模式。用于在IC空暇时能够考虑选择进入。使系统耗能减少,在必要的时候通过唤醒在进入Run mode正常工作。

    Low Power Mode,在嵌入式系统中考虑的非常多,也非常关键,由于一般都是用移动电源供电,合理使用Low Power Mode。会非常好的提高设备的续航能力。

    Low Power Mode方式

    1. Sleep Mode:CPU时钟关闭。全部peripheral时钟运行。
    2. Stop Mode:全部时钟均停止;
    3. Standby Mode:1.8 V domain power-off。这里domain power-off应当是相当于关闭了给IC供电的电源。
      另外,假设在Run Mode下,也能够通过例如以下手段来减少功耗:
    4. 减少System Clock的速度,即通过Clock的配置,利用分频的作用。将系统Clock从最高的48MHz减少,这部分的配置能够參考Clock相关文档或文章。
    5. 当不使用APB或AHB peripheral时,使用门控时钟的方式。在peripheral配置使用时。通常会先通过RCC_AH/PBClockCmd(xx,Enable)之类的接口来使能peripheral时钟,有时候,可能这个peripheral并没有再使用了。那能够通过RCC_AH/PBClockCmd(xx,Disable)的接口将其关闭,也能够省些电。

      这里的RCC_AH/PBClockCmd()是stm32的固件库中提供的,须要了解细节的能够看下stm32固件库,当中主要是通过对RCC_APBENR和RCC_AHBENR register操作来使能/禁止某项peripheral的时钟的。
      几种Low Power Mode的比較例如以下:
      这里写图片描写叙述

    Sleep Mode

    怎样进入Sleep Mode?

    运行WFI (Wait For Interrupt) 指令或WFE (Wait for Event)指令。进入Sleep Mode的机制能够通过Cortex-M0 System Control register的SLEEPONEXIT bit来选择:
    6. Sleep-now:SLEEPONEXIT bit置零,在WFI/WFE指令运行之后马上进Sleep Mode;
    7. Sleep-on-exit:SLEEPONEXIT bit置1,在MCU退出了最低优先级的ISR之后,即系统没有不论什么ISR在处理时,就会进入Sleep Mode。

    怎样退出Sleep Mode?

    退出Sleep Mode的方式和使用的进入Sleep Mode的指令WFI和WFE有关,使用WFI进入Sleep Mode,不论什么中断的发生都会导致退出Sleep Mode,而WFE指令进入的Sleep Mode,在event发生时会退出Sleep Mode,对于WFE指令进入Sleep Mode的方式,须要使用例如以下两种方式配置其退出Sleep Mode:
    8. 使能一个peripheral中断(非NVIC中断),使能Cortex-M0 System Control register的SEVONPEND bit。当MCU从WFE Sleep Mode醒来时,须要清掉peripheral interrupt pending bit和peripheral NVIC IRQ channel pending bit ;
    9. 配置一个外部或内部EXTI line为event模式。

    Sleep Mode进入退出场景比較

    这里写图片描写叙述
    这里写图片描写叙述

    Stop Mode

    比Sleep Mode更进一步,IC内部Clock应当都停止了,SRAM和register。IO口状态是保持在上一刻进入Stop Mode时的状态。

    Stop Mode进出场景比較

    这里写图片描写叙述

    Standby Mode

    比Stop Mode更省电,SRAM和register仅仅有部分维持数据(需看下register表,应当有标明为Standby Circuitry的)。

    Standby Mode进出场景比較

    这里写图片描写叙述
    在上面的Stop Mode和Standby Mode中, 貌似IWDG,RTC。LSI和LSE还是由这几个peripheral各自的register编程设定而受控制的,由于即使是进入了Low Power Mode,RTC的功能还是须要的,由于要计时,这非常重要。

    Low Power Mode下的debug问题

    由于进入Stop Mode和Standby Mode后,Cortex M0事实上已经停止了(Clock关闭了)。因此用swd此时应当是没办法debug的,只是stm32f0308的资料说,通过设置DBGMCU_CR register的一些配置,还是能够debug的,可是没有进一步具体的说明了……只是,对于stm32f0308这颗IC,貌似在进入Low Power Mode后,也不是必需去debug,由于Stop Mode和Standby Mode本来就没有代码在运行了,除非是stm自己在开发和验证IC时。可能须要做些debug,所以这里对使用者来说。应当没有什么所谓了。

    Low Power Mode的RTC唤醒方式

    RTC alarm方式能够用来唤醒Stop mode和Standby Mode,RTC时钟源能够选择LSE,也能够是LSI,这两个低速时钟都适合用于低功耗的。


    对于RTC alarm唤醒Stop Mode。须要:
    10. 配置EXTI line 17为上升沿;
    11. 配置RTC可产生RTC alarm。


    对于RTC alarm唤醒Standby Mode,则仅仅须要RTC可产生RTC alarm就可以。

  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7073510.html
Copyright © 2011-2022 走看看