Flow of PWR Mode intro单片机休眠
经过几次项目在用到低功耗休眠模式的配置时老是出错的囧态百出之后,痛定思痛,决定对这部分内容单独进行整理总结。
一、What is PWR Mode
PWR 即是 Power, 是低功耗休眠相关操作的关键词。 电池供电工作的电子设备为了保证续航和寿命,都在不用的时候进行低功耗休眠处理。都离不开的一项指标就是,在非工作模式状态下的低功耗休眠模式的静态功耗。 通过配置主控芯片单片机的外围IO配置以及单片机的休眠,使主控芯片在内的相关电路的静态功耗降低,起到减少消耗进而增加续航的作用。
二、 Details
1. Different Mode
一般来说,各种主控芯片MCU都会提供不同等级的休眠模式————即在不同的休眠模式里可供活动和调用的资源不尽相同,自然,他们的静态功耗等级也是不一样的。
2. Power Control
在进入对应等级的低功耗休眠模式之前(指进入休眠这条指令之前),要对相应的资源进行关闭处理。 不关闭的话,举个例子,假如你的休眠模式是可以被定时器中断或者ADC捕获/ADC转换中断唤醒了,在休眠之前没有关闭这些中断的话,就会被频繁的唤醒(尤其在时基较小的情况下)。 要注意关断的资源包括但不限于:ADC、Timer、WTD等
三、 Flow of config to PWR Mode 休眠流程
- 关总中断
- GPIO的睡前配置:非休眠唤醒的引脚通常是配置成输出低,减少漏电流。(应根据具体电路做相应调整)
- 关闭ADC和Timer
- 关闭PWR的低电平自动唤醒功能
- 使能唤醒IO的外部中断
- 刷新各标志位(外部中断标志位、休眠唤醒标志位)
- 判断此时无按键或适配器插入(有任意其一即跳过下一步的休眠指令,恢复单片机初始化配置)
- 进入休眠模式(根据功耗要求及需要待机的资源要求选择对应的休眠模式)
- (被唤醒之后从休眠指令之后继续执行)
- 系统休眠唤醒的初始化
- 使能Timer,时基开始运转。
四、 Warning of PWR config
And then I’d like to talk about the warnings and errors in PWR’s config.
1. error of code to fall asleep 进入休眠指令错误
可通过观测整个主控板的整体静态功耗来判断是否进入休眠模式,较低功耗的休眠模式常为几个uA微安级别,而非休眠状态下的静态功耗则至少是mA毫安级别,如果没有进入睡眠,首先检查进入睡眠的这条指令封装的对应的寄存器操作是否是正确的.
2. Error of config before entering asleep 进入休眠前的配置错误
这种错误会导致出现能顺利进入睡眠但是会被错误的配置频繁唤醒,或者静态功耗居高不下。 优先检查PWR_LVR 和 PWR_LVI 即单片机自带的低电平自动复位和唤醒。 其次检查Timer和ADC 的对应中断 有些单片机的休眠模式允许的唤醒中断方式比较多,未关闭Timer定时器中断和ADC中断的话,很大可能会被时基的定时器中断唤醒或者被ADC采样转换中断唤醒。
3. Error of config after awaking 唤醒后的初始化配置
如果唤醒之后Timer没有及时使能,系统的时基没有正常工作,则一切跟时基相关的状态切换和输出都会瘫痪,造成系统假死在这一段的现象。
|