再看完几篇大神的文章之后,我觉得应该重新规划一下文章的描述方式,我们首先就要明白自己的目的是什么,然后看看自己的目的的最好结果和最差结果,然后分析自己目前的处境。最后才是选择方法途径,也许再明白自己和目标的局限性之后,才能更好的实现目标吧。
4.1、低功耗的目的和应用:
但是,省电只是一个特性,我们不能用这个特性来影响了主要的功能,所以stm提供了多种的省电方式。
最不需要省电的:例如很多常备设备,比如那些要保持一定在线的比如数据库,服务器这种。
需要低功耗,可以忍受短时间恢复:
4.2、stm32各种模式的区别:
4.2.1、睡眠模式
活动)说明。有两个选项可用于选择睡眠模式输入机制,
●立即休眠:如果清除了SLEEPONEXIT位,则MCU会立即进入休眠模式
●退出时休眠:如果SLEEPONEXIT位置1,则MCU会在进入退出最低优先级的ISR后,立即进入休眠模式。
有关如何进入休眠模式的详细信息,请参见表2和表3。
如果使用WFI指令进入休眠模式,则任何外设中断都会由嵌套向量中断控制器(NVIC)可以将器件从休眠模式唤醒。
可以通过以下任一方式生成唤醒事件:
Cortex-M3系统控制寄存器中的SEVONPEND位。当单片机
必须清除通道挂起位(在NVIC中断清除挂起寄存器中)。
从WFE,无需清除外设中断挂起位或NVIC
此模式提供了最短的唤醒时间,因为在中断进入/退出时不会浪费时间。
4.2.2、停止模式:
模式下,将停止1.8 V域中的所有时钟,PLL,HSI和HSE RC振荡器被禁用。 SRAM和寄存器内容被保留。
进入停止模式
这由电源控制寄存器的LPDS位配置(PWR_CR)。
如果正在进行对APB域的访问,则停止模式条目将延迟到APB为止访问完成。
●独立看门狗(IWDG):通过写入其密钥寄存器或通过以下方式启动IWDG硬件选项。启动后,除非复位,否则无法停止。
●内部RC振荡器(LSI RC):由控制/状态中的LSION位配置寄存器(RCC_CSR)。
除非禁用它们,否则ADC或DAC在停止模式下也可能消耗功率
DAC_CR寄存器中的0必须都写入0。
有关如何退出停止模式的更多详细信息,请参见表4。
表3.退出时睡眠
模式输入
SLEEPDEEP = 0且SLEEPONEXIT = 1
模式退出中断。唤醒延迟无。
12/43 Doc ID 13922 Rev 2
待机模式可实现最低功耗。它基于Cortex-M3深度睡眠模式,禁用了稳压器。 1.8 V域关闭。 PLL,HSI振荡器和HSE振荡器也是关闭。除备份域中的寄存器外,SRAM和寄存器内容均丢失和备用电路(见图1)。
有关如何进入待机模式的更多详细信息,请参见表5。
●独立看门狗(IWDG):通过写入其密钥寄存器或通过以下方式启动IWDG硬件选项。一旦启动,除非复位,否则无法停止。
●内部RC振荡器(LSI RC):由控制/状态中的LSION位配置寄存器(RCC_CSR)。
退出待机模式
WKUP引脚上出现上升沿或出现RTC警报。唤醒后重置所有寄存器
从待机模式唤醒后,程序执行将以与
控制/状态寄存器(PWR_CSR)指示MCU处于待机模式。
4.2.4、模式区别对比:
睡眠模式,cpu时钟关闭所有的外设包括m3核心外设像:NVIC,SYStick,etc,running。
待机模式:1.8V断电。
睡眠模式:所有中断
待机模式:重新上电,RTC时钟,设定的唤醒管脚上升沿。
睡眠模式>停止模式>待机模式。
睡眠模式>停止模式>待机模式。
4.3.1、选择法
举例:如果是获取传感器的值,再传感器发送信号过来之前,我们到底需要处于一个什么状态:
我想了一下,大致上可以使用与的方法来实现快速选择:
低功耗时,需要什么状态
唤醒需要多长时间
1.平时需要灯的闪烁表示正常。-》睡眠
3.唤醒之后,希望可以较快反应。-》睡眠
遥控器,电池供电,平时无操作,按键触发发送红外指令:
2.外部中断唤醒:睡眠,待机,停止。
综上所述,采用停止模式。
1.平时没有操作:待机或者停止。
3.唤醒不需要太及时:待机、停止。
4.3.2、关键法:
当然,上面只是一个选择方法。我们在实际的开发项目的时候,更是要考虑到自己的产品的关键性能是什么,例如我推荐的文章在实际中讲到手机关机的时候如果采用待机功能,那么充电还是用户按键就没有办法来区分,也没有办法在关机充电时显示电量。这样对于手机的功能来说当然是得不偿失的。