| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32L051 低功耗特性分析 -> 正文阅读 |
|
[嵌入式]STM32L051 低功耗特性分析 |
STM32L051 低功耗特性分析 32MHz 2.7mW功耗 low power sleep mode大概只有4.5uA stop mode大概 0.4uA stop mode能比low power sleep mode功耗低一个数量级。 这个时候是把core还有大部分clk都关闭了 stop mode with rtc 可以定时通过lptimer定时唤醒,执行中断or reumse程序执行。可以满足电池业务需求,同时把功耗降低一个等级 低功耗进入退出流程,通过查看stm32 discovery 例程即可。 cpu is stopped 指的是cpu clk被关闭,但是power up。这个时候pc不走。 power mode分析 sleep mode是只关闭cpu clk stop mode是关整个vcore domain的clk,包括pll等,关闭的更加彻底 standy mode是把关闭vcore的电源和时钟 1.sleep mode和stop mode都是可以程序都可以resume,但是standby mode需要复位重新初始化;因为standby时,把vcore domain下电(包括cpu ram等),ram register等内容丢失 2.stop和standby mode下只有部分外设在工作,因此提供的唤醒源业有限,特别是stanby mode 具体哪些ip才工作,看下IP function在各个mode下的状态表整理 3.stop mode和standby mode相比,内部regulator一个是low power 状态,一个是关闭状态。 mcu中的功耗大头是 各个ip的clk 还有内部regulator adc pll等;stm32l0 调频调压都支持 power domain分析 可以看出,
dvfs表 需要注意的是,cpu内部加入了 问题:WFI和WFE的区别 wfi是通过中断机制产生的,需要把中断使能,通过nvic中对应的exti中断需要使能。resume时,会进入到中断服务程序中。 wfe是通过event机制产生的,resume时,会接着执行程序,而不是进入到中断服务程序。 wakeup event管理: wake up event的目的是去唤醒core, wake up event的产生方式有两种, 一是对应外设生中断,但是nvic不打开中断(虽然nvic不打开中断,但是nvic对应的pending bit还是会因为外设中断置起而置起),如此产生event后,cpu core需要去清除外设和nvic的中断pending bit。 二是将exti line配置为event mode,如此不产生中断,不会产生nvic pending bit,因此也就不需要再resume后clear 这样exti interrupt可以wakeup core,二是将exti配置为event mode,如此不会产生中断pending。只是产生唤醒信号。 有一些外设,通过连接在exti direct line上,这些外设可以产生一个异步信号,发送给exti,作为唤醒源。 exti实际上既可以产生中断作为唤醒源,也可以产生wakeup event,用来做唤醒源, wfi一般用于cpu idle wfe用于spinlock wfi和wfe的区别在于,wfi等待的是中断,wfe等待的是事件,所以wfe不能进入中断服务函数,而wfe可以。 spinlock是基于wfe机制去实现的。 arm core low-power standby的实现:一般是由实现者定义的,不过一般的额操作是,关闭clk,保持供电。 进入sleep stop standby mode操作步骤 /** * @brief Enters Stop mode. * @note In Stop mode, all I/O pins keep the same state as in Run mode. * @note When exiting Stop mode by issuing an interrupt or a wakeup event, * MSI or HSI16 RCoscillator is selected as system clock depending * the bit STOPWUCK in the RCC_CFGR register. * @note When the voltage regulator operates in low power mode, an additional * startup delay is incurred when waking up from Stop mode. * By keeping the internal regulator ON during Stop mode, the consumption * is higher although the startup time is reduced. * @note Before entering in this function, it is important to ensure that the WUF * wakeup flag is cleared. To perform this action, it is possible to call the * following macro : __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU) * * @param Regulator: Specifies the regulator state in Stop mode. * This parameter can be one of the following values: * @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON * @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON * @param STOPEntry: Specifies if Stop mode in entered with WFI or WFE instruction. * This parameter can be one of the following values: * @arg PWR_STOPENTRY_WFI: Enter Stop mode with WFI instruction * @arg PWR_STOPENTRY_WFE: Enter Stop mode with WFE instruction * @retval None */ void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) { uint32_t tmpreg = 0U; /* Check the parameters */ assert_param(IS_PWR_REGULATOR(Regulator)); assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); /* Select the regulator state in Stop mode ---------------------------------*/ tmpreg = PWR->CR; /* Clear PDDS and LPDS bits */ CLEAR_BIT(tmpreg, (PWR_CR_PDDS | PWR_CR_LPSDSR)); /* Set LPSDSR bit according to PWR_Regulator value */ SET_BIT(tmpreg, Regulator); /* Store the new value */ PWR->CR = tmpreg; /* Set SLEEPDEEP bit of Cortex System Control Register */ SET_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk); /* Select Stop mode entry --------------------------------------------------*/ if(STOPEntry == PWR_STOPENTRY_WFI) { /* Request Wait For Interrupt */ __WFI(); } else { /* Request Wait For Event */ __SEV(); __WFE(); __WFE(); } /* Reset SLEEPDEEP bit of Cortex System Control Register */ CLEAR_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk); } |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 12:17:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |