历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2020年03月13日 | [CortexM0--stm32f0308]Low Power Mode

2020-03-13 来源:eefocus

问题描述

stm32f0308正常是运行在Run mode下,这种mode是在reset之后的默认模式。Low Power Mode,即低功耗模式,用于在IC空闲时可以考虑选择进入,使系统耗能降低,在必要的时候通过唤醒在进入Run mode正常工作。Low Power Mode,在嵌入式系统中考虑的很多,也很关键,因为一般都是用移动电源供电,合理使用Low Power Mode,会很好的提高设备的续航能力。


Low Power Mode方式

Sleep Mode:CPU时钟关闭,所有peripheral时钟运行;

Stop Mode:所有时钟均停止;

Standby Mode:1.8 V domain power-off,这里domain power-off应当是相当于关闭了给IC供电的电源。 


另外,如果在Run Mode下,也可以通过如下手段来降低功耗:

降低System Clock的速度,即通过Clock的配置,利用分频的作用,将系统Clock从最高的48MHz降低,这部分的配置可以参考Clock相关文档或文章;

当不使用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即可。

推荐阅读

史海拾趣

Franel Corp公司的发展小趣事

法勒公司始终将技术创新视为企业发展的核心驱动力。在中国市场,法勒不断推出适应本土需求的新产品和解决方案,如非接触供电系统、智能故障诊断系统等。这些创新技术不仅提升了物流设备的智能化水平,还为客户带来了更高的效率和更低的运行成本。法勒的技术创新不仅赢得了市场的广泛认可,也推动了整个物流装备行业的技术进步和产业升级。

Barkston Plastics Engineering Ltd.公司的发展小趣事

在电子行业的初创时期,Barkston Plastics Engineering Ltd.以其创新性的塑料材料应用技术在市场上崭露头角。公司研发了一种具有优异绝缘性能的塑料材料,成功应用于电视机外壳的生产,大大提高了产品的安全性和耐用性。这一技术突破为Barkston赢得了首批重要的客户,并奠定了公司在电子行业的基础。

国盛科技(BOCHEN)公司的发展小趣事

国盛科技在技术创新方面取得了显著成果。截至目前,公司已累计取得8项发明专利、30项新型实用型专利,并成功转化了19项高新技术产品和知识产权成果。这些专利和成果的取得,不仅展示了国盛科技在电子元器件领域的研发实力,也为公司的持续发展提供了有力支撑。

EPIC公司的发展小趣事

Epic Games一直关注并支持独立游戏开发者的发展。过去,独立开发者有机会与Epic Store签订协议以获得财务支持或提高游戏的知名度。然而,随着市场环境的变化和金融合约结构的转变,独立开发者面临着越来越多的挑战。尽管如此,Epic Games仍然致力于提供支持和资源来帮助独立开发者克服障碍、实现创新并推动整个游戏行业的进步。通过与独立开发者的紧密合作和持续支持,Epic Games不仅促进了游戏行业的多样性发展,也为自己赢得了广泛的好评和声誉。

HEIMANN公司的发展小趣事

1998年,Epic Games发布了一款名为“虚幻”的3D第一人称射击游戏。这款游戏不仅游戏内容新颖,更引人注目的是它背后完全自主开发的3D游戏引擎。这个引擎后来被称为“虚幻引擎”,并成为了Epic Games的核心技术之一。随着游戏的成功,虚幻引擎也逐渐受到了业界的关注。许多其他游戏开发商开始采用这款引擎来开发自己的游戏,从而使得Epic Games在游戏引擎领域取得了显著的商业成功。

CALMIRCO公司的发展小趣事

CALMIRCO公司深知合作共赢的重要性,因此积极与上下游企业建立紧密的合作伙伴关系。公司与多家知名芯片制造商、电子设备生产商等建立了长期稳定的合作关系,共同推动产业链的发展。通过资源共享、技术互补等方式,CALMIRCO公司与合作伙伴实现了共赢发展,共同提升了行业竞争力。

问答坊 | AI 解惑

音乐集成FD9300是什么样的芯片?

请教音乐集成FD9300是什么样的芯片?有谁知道管脚排列及功能?…

查看全部问答>

最小系统

做个最小系统,当地不作显示,通过线缆或无线系统联至计算机系统进行各类处理(显示\\控制\\分析\\存档等….),       本处目的只是想做功能性实验: 将传感头置于不同有害气体环境中(主要为磷\\氢\\锌\\硫,3—10%不同浓度不同 ...…

查看全部问答>

求助RTX环境下串口通信的问题

小弟最近开始学习Ardence RTX,有很多不懂得地方,下面是一个基于serialAPI.h开发驱动的RTX通信串口测试程序。主线程是读数据,次线程是写数据。经过两次测试: 1.在单台计算机上用串口线连接COM1和COM2,并在RTX环境下将其打开,将下面次线程中写 ...…

查看全部问答>

请问各位大虾,有熟悉lwip的吗? 问个在inet.c文件中有个inet_chksum_pseudo()的函数相关问题。

函数原型如下: /* inet_chksum_pseudo: * * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. */ u16_t inet_chksum_pseudo(struct pbuf *p,        struct ip_addr *src, struct i ...…

查看全部问答>

请问ROM/bin文件的格式是什么如何被执行处理的?

请问ROM/bin文件的格式是什么如何执行处理的? 例如在【显示设置】中的 1234512345,在手机/MP4的ROM中发现是DF5FBBB9BA的,请问做了那些处理?变换的方式是什么? 二进制的: 1234512345 0001 0010 0011 0100 0101 0001 0010 0011 0100 01 ...…

查看全部问答>

请问能否可以实现让windows xp支持硬关机!?

本人相当的菜鸟,也不知道我形容的清楚不清楚. 就是说想象机顶盒那样的直接按电源开关进行关机操作,是不是需要预先将windows xp嵌入到主板上呢??…

查看全部问答>

安捷伦武汉招聘销售工程师!

安捷伦武汉招聘销售工程师! Job Title                         Sales Engineer Type                &n ...…

查看全部问答>

ST中TB中断只能进入一次

@interrupt void TB_INIT(void){    PADR=0;    return;}void main(void){    PADDR=0x0F;    PAOR=0x0F;    LTCSR=0x ...…

查看全部问答>

CCS5安装问题

CCS5安装老出现需要licence,怎么解决啊…

查看全部问答>

在DM385平台上面调试i2c接口 (DM81xx)

本帖最后由 37°男人 于 2015-7-3 10:31 编辑 在i2c tools中有4个执行程序: i2cdetect : 用来列举i2c 总线上面的所有的设备 i2cdump  : 显示对应芯片的所有的寄存器的值 i2cget      : 读取芯片的某个寄存 ...…

查看全部问答>