标签:reg tle data- 场景 pre 代码 通过 main rcu
stm32f0308正常是运行在Run mode下。这样的mode是在reset之后的默认模式。Low Power Mode。即低功耗模式。用于在IC空暇时能够考虑选择进入。使系统耗能减少,在必要的时候通过唤醒在进入Run mode正常工作。
Low Power Mode,在嵌入式系统中考虑的非常多,也非常关键,由于一般都是用移动电源供电,合理使用Low Power Mode。会非常好的提高设备的续航能力。
这里的RCC_AH/PBClockCmd()是stm32的固件库中提供的,须要了解细节的能够看下stm32固件库,当中主要是通过对RCC_APBENR和RCC_AHBENR register操作来使能/禁止某项peripheral的时钟的。
几种Low Power 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的指令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更进一步,IC内部Clock应当都停止了,SRAM和register。IO口状态是保持在上一刻进入Stop Mode时的状态。
比Stop Mode更省电,SRAM和register仅仅有部分维持数据(需看下register表,应当有标明为Standby Circuitry的)。
在上面的Stop Mode和Standby Mode中, 貌似IWDG,RTC。LSI和LSE还是由这几个peripheral各自的register编程设定而受控制的,由于即使是进入了Low Power Mode,RTC的功能还是须要的,由于要计时,这非常重要。
由于进入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,所以这里对使用者来说。应当没有什么所谓了。
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就可以。
[CortexM0--stm32f0308]Low Power Mode
标签:reg tle data- 场景 pre 代码 通过 main rcu
原文地址:http://www.cnblogs.com/yfceshi/p/7073510.html