打印
[应用相关]

stm32之低功耗总结

[复制链接]
2259|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2021-10-1 19:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
写一写到底选择什么模式:


我们首先就要明白自己的目的是什么,然后看看自己的目的的最好结果和最差结果,然后分析自己目前的处境。最后才是选择方法途径,也许再明白自己和目标的局限性之后,才能更好的实现目标吧。
找到目标--------------》认清现状--------------》找方法


1、低功耗的目的和应用:

我们做低功耗目的可以说是相当简单,那就是省电,省下电量。
但是,省电只是一个特性,我们不能用这个特性来影响了主要的功能,所以stm提供了多种的省电方式。
我们先按照常见的产品来分低功耗的类型:

  • 最不需要省电的:例如很多常备设备,比如那些要保持一定在线的比如数据库,服务器这种。
  • 需要低功耗,但是要可以迅速唤醒:这个,就必须保持实时了,比如蓝牙耳机,不播放音乐或者没有连接时,当然可以低功耗,但是一旦有信号,当然是要匀速唤醒。
  • 需要低功耗,可以忍受短时间恢复:
  • 需要低功耗,每次使用时,需要长时间恢复:



使用特权

评论回复
沙发
tpgf|  楼主 | 2021-10-1 19:28 | 只看该作者
2、stm32各种模式的区别:


2.1、睡眠模式
通过执行WFI(等待中断)或WFE(等待中断)进入睡眠模式。
活动)说明。有两个选项可用于选择睡眠模式输入机制,
取决于Cortex-M3系统控制寄存器中的SLEEPONEXIT位:

●立即休眠:如果清除了SLEEPONEXIT位,则MCU会立即进入休眠模式
当执行WFI或WFE指令时。
●退出时休眠:如果SLEEPONEXIT位置1,则MCU会在进入退出最低优先级的ISR后,立即进入休眠模式。
在休眠模式下,所有I / O引脚保持与运行模式相同的状态。
有关如何进入休眠模式的详细信息,请参见表2和表3。

退出睡眠模式
如果使用WFI指令进入休眠模式,则任何外设中断都会由嵌套向量中断控制器(NVIC)可以将器件从休眠模式唤醒。
如果使用WFE指令进入休眠模式,则MCU会在退出后立即退出休眠模式。
可以通过以下任一方式生成唤醒事件:
●启用外围控制寄存器中的中断,但不启用NVIC中的中断,并启用
Cortex-M3系统控制寄存器中的SEVONPEND位。当单片机
从WFE,外设中断挂起位和外设NVIC IRQ恢复
必须清除通道挂起位(在NVIC中断清除挂起寄存器中)。
●或在事件模式下配置外部或内部EXTI线路。当CPU恢复时
从WFE,无需清除外设中断挂起位或NVIC
未设置IRQ通道挂起位,因为未设置与事件行相对应的挂起位。
此模式提供了最短的唤醒时间,因为在中断进入/退出时不会浪费时间。



使用特权

评论回复
板凳
tpgf|  楼主 | 2021-10-1 19:28 | 只看该作者



2.2、停止模式:

停止模式基于Cortex-M3深度睡眠模式和外围时钟的结合门控。稳压器可以配置为正常或低功耗模式。停止中
模式下,将停止1.8 V域中的所有时钟,PLL,HSI和HSE RC振荡器被禁用。 SRAM和寄存器内容被保留。
在停止模式下,所有I / O引脚保持与运行模式下相同的状态。

进入停止模式
有关如何进入停止模式的详细信息,请参见表4。为了进一步降低停止模式下的功耗,可以将内部稳压器设为置于低功耗模式。
这由电源控制寄存器的LPDS位配置(PWR_CR)。
如果正在进行闪存编程,则将停止模式的输入延迟到存储器访问完成。
如果正在进行对APB域的访问,则停止模式条目将延迟到APB为止访问完成。
在停止模式下,可以通过编程各个控制位来选择以下功能:
●独立看门狗(IWDG):通过写入其密钥寄存器或通过以下方式启动IWDG硬件选项。启动后,除非复位,否则无法停止。
●实时时钟(RTC):由备份域中的RTCEN位配置控制寄存器(RCC_BDCR)
●内部RC振荡器(LSI RC):由控制/状态中的LSION位配置寄存器(RCC_CSR)。
●外部32.768 kHz振荡器(LSE OSC):由外部的LSEON位配置备份域控制寄存器(RCC_BDCR)。
除非禁用它们,否则ADC或DAC在停止模式下也可能消耗功率
在输入之前。要禁用它们,需使用ADC_CR2寄存器中的ADON位和ENx位
DAC_CR寄存器中的0必须都写入0。

退出停止模式
有关如何退出停止模式的更多详细信息,请参见表4。
通过发出中断或唤醒事件退出停止模式时,HSI RC振荡器为选择作为系统时钟。
表3.退出时睡眠
退出睡眠说明
模式输入
WFI(等待中断)时:
SLEEPDEEP = 0且SLEEPONEXIT = 1
请参考Cortex™-M3系统控制寄存器。
模式退出中断。唤醒延迟无。
电源AN2629
12/43 Doc ID 13922 Rev 2
当稳压器在低功耗模式下运行时,会增加一个启动延迟,从“停止”模式唤醒时发生。通过在停止期间保持内部调节器为ON模式下,尽管启动时间减少了,但是消耗却更高。


使用特权

评论回复
地板
tpgf|  楼主 | 2021-10-1 19:29 | 只看该作者


2.3、待机模式:

待机模式可实现最低功耗。它基于Cortex-M3深度睡眠模式,禁用了稳压器。 1.8 V域关闭。 PLL,HSI振荡器和HSE振荡器也是关闭。除备份域中的寄存器外,SRAM和寄存器内容均丢失和备用电路(见图1)。
进入待机模式
有关如何进入待机模式的更多详细信息,请参见表5。
在待机模式下,可以通过对单个控制进行编程来选择以下功能位:
●独立看门狗(IWDG):通过写入其密钥寄存器或通过以下方式启动IWDG硬件选项。一旦启动,除非复位,否则无法停止。
●实时时钟(RTC):由备份域控件中的RTCEN位配置寄存器(RCC_BDCR)
●内部RC振荡器(LSI RC):由控制/状态中的LSION位配置寄存器(RCC_CSR)。
●外部32.768 kHz振荡器(LSE OSC):由外部的LSEON位配置备份域控制寄存器(RCC_BDCR)

退出待机模式
当外部复位(NRST引脚),IWDG复位,
WKUP引脚上出现上升沿或出现RTC警报。唤醒后重置所有寄存器
除了电源控制/状态寄存器(PWR_CSR)之外,其他功能均来自待机模式。
从待机模式唤醒后,程序执行将以与
复位(引导引脚采样,获取向量复位等)。电源中的SBF状态标志
控制/状态寄存器(PWR_CSR)指示MCU处于待机模式。




使用特权

评论回复
5
tpgf|  楼主 | 2021-10-1 19:30 | 只看该作者
2.4、模式区别对比:

2.4.1三种模式时钟区别:
睡眠模式,cpu时钟关闭所有的外设包括m3核心外设像:NVIC,SYStick,etc,running。
停止模式:所有的时钟停止,但是保留1.8v供电。
待机模式:1.8V断电。

2.4.2三种模式唤醒区别:
睡眠模式:所有中断
停止模式:外部中断
待机模式:重新上电,RTC时钟,设定的唤醒管脚上升沿。

2.4.3三种模式耗电排名:
睡眠模式>停止模式>待机模式。

2.4.4三种模式唤醒速度排名:
睡眠模式>停止模式>待机模式。


使用特权

评论回复
6
tpgf|  楼主 | 2021-10-1 19:30 | 只看该作者
3、选择适合我们的模式

3.1、选择法
三个模式各有优劣,我们应当选择最适合自己的模式:
举例:如果是获取传感器的值,再传感器发送信号过来之前,我们到底需要处于一个什么状态:
这是一个很具体的问题?
我想了一下,大致上可以使用与的方法来实现快速选择:
这里有三个关键:

低功耗时,需要什么状态

有什么方式可以唤醒

唤醒需要多长时间

还是传感器:例如烟雾报警传感器,采用插线供电,平时需要灯的闪烁表示正常。
1.平时需要灯的闪烁表示正常。-》睡眠
2.唤醒方式为外部信号。-》睡眠,待机或者停止
3.唤醒之后,希望可以较快反应。-》睡眠
通过与选则停止模式,满足低电量消耗的要求,但是又要满足平时的闪烁操作。

遥控器,电池供电,平时无操作,按键触发发送红外指令:
1.平时没有操作:停止或者待机。
2.外部中断唤醒:睡眠,待机,停止。
3.唤醒需要较快:待机,睡眠。
综上所述,采用停止模式。

紧急照明夜灯,平时不需要操作,不需要很及时的反应,必须要节省电量来保证紧急时候的使用:
1.平时没有操作:待机或者停止。
2.外部中断唤醒:睡眠待机停止。
3.唤醒不需要太及时:待机、停止。
综上所述:采用待机模式,等待新哈窦娥到来。

3.2、关键法:
当然,上面只是一个选择方法。我们在实际的开发项目的时候,更是要考虑到自己的产品的关键性能是什么,例如我推荐的**在实际中讲到手机关机的时候如果采用待机功能,那么充电还是用户按键就没有办法来区分,也没有办法在关机充电时显示电量。这样对于手机的功能来说当然是得不偿失的。


使用特权

评论回复
7
duo点| | 2021-10-4 10:52 | 只看该作者
学习了,感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1923

主题

15596

帖子

11

粉丝