stm32 低功耗模式 学习总结

停止模式基于Cortex®-M3 deepsleep mode 结合外设时钟选通

停止模式:

  • 内核停止, VCORE范围内的时钟都停止, PLL,MSI, HSIHSE都被禁止, SRAM和寄存器的内容保留

进入停止模式必须

  • 选择进入低功耗睡眠模式的机制 (SLEEPONEXIT),设置SLEEPDEEP位,清除PDDS位,清除WUF位, 设置LPSDSR(电压稳压器) 执行WFIWFE指令
  • 清除所有的EXTI,RTC警报,RTC唤醒,RTC侵入检测,RTC时间戳的未处理标志位。 从停止模式唤醒时, MSI将自动作为系统时钟,唤醒所需时间的典型值为7.9us

 

进入停止模式可选

  • 内部电源变换器可以工作在正常模式或者低功耗模式,为了降低功耗,推荐设置电源变换器工作在低功耗模式(LPSDSR) 
  •  禁止Flash的供电
  •  关闭VREFINT,BOR,PVD和侵入检测功能 ,They can be switched on again by software after exiting the Stop mode using the ULP bit in the PWR_CR register.
  •  可以单独使能IWDG,RTC,LSILSE功能
  •  可以使用ADC,DACLCD的功能
  •  配置LPSDSR 位可以使内部稳压器进入低功耗模式,进一步省电。

从STOP唤醒后:

  • 1.从stop和standby模式唤醒或复位后,会启用MSI作为系统时钟。
  • 2.stop唤醒后是STOP模式前的MSI频率(频率在RCC_ICSCR设定) PS.standy唤醒后是MSI的默认值;

 

 

stop总结:

  1. MSI RC 提供了低功耗的时钟源,用于在低耗模式下降低唤醒时间和能耗。
  2. 唤醒重启后通过RCC_CR寄存器的MSIRDY标志位可以监测MSI RC震荡器是否企稳。
  3. MSI RC振荡器可以通过RCC_CR寄存器的MSION位开关。
  4. 在RUN模式可以在外设空闲等待时关闭时钟降低功耗,比如HCLK,PCLK1,PCLK2;
  5. 进入SLEEP模式前可以预先降低系统时钟,比如SYSCLK,HCLK,PCLK1,PCLK2;
  6. 如果要进一步降低SLEEP功耗,可以在执行WFI或WFE前关闭所有外设时钟。
  7. 关于时钟可以参考HAL库的  SystemClock_Config  函数
  8. 复位RCC_AHBLPENR 和 RCC_APBxLPENR 相应位可自动关闭外设时钟。Disabling the peripherals clocks in Sleep mode can be performed automatically by resettingthe corresponding bit in RCC_AHBLPENR and RCC_APBxLPENR registers (x can 1 or 2)
  9. 进入STOP模式,IO状态维持RUN的模式
  10. 如果在进入STOP前想要禁止外部时钟,HSEON位必须首先关闭,系统时钟切换到HSI。否则clock security system (CSS)必须使能检测外部晶振失效以避免进入stop模式时发生的故障.
  11. 如果内存编程或者APB域正在运行,STOP模式会延迟到他们结束动作才进入状态。
  12. 独立开门狗IWDG一旦开启是不能停止的,除非复位。
  13. RTCEN 配置RTC,LSION配置LSI; LSEON配置LSE;the ADON bit in the ADC_CR2 register and the ENx bit in the DAC_CR register must both be written to 0
  14. When the voltage regulator operates in low-power mode, an additional startup delay is incurred when waking up from Stop mode

HAL_RTC_SetAlarm应该可以设置RTC ALARM 定时唤醒,使用方法不清楚,需要实验论证一下。

  format: RTC_FORMAT_BIN

      sAlarm->Alarm : RTC_ALARM_A 或 RTC_ALARM_B

  sAlarm->AlarmTime:应该是设置时分秒,其他参数不清楚。

 


可以配置运行:IWDG,RTC,LSI,LSE

进入stop mode前需要停止ADC:位于ADC_CR2的ADON和DAC_CR的ENX写0

补充

运行时低功耗(LP RUN):

  • 1.稳压器(regulator)设置成低功耗模式(low-power mode),与此同时运行频率不能超过f_MSI range1 。注意低功耗下读取RTC要读两次,两次一样才表示准确,如果不一样还要继续读直到两次一样。
  • 2.仅当VCORE是rang 2时,才能进入LP RUN.

低功耗睡眠(LP SLEEP):

  • 1.SLEEPONEXIT 为 0 立刻睡眠;为1执行完中断处理程序(ISR)后睡眠.
  • 2.SLEEP_PD 可以关闭flash内存降低功耗,但是会增加唤醒时间
  • 3.digital IP clock 必须在RCC_APBxLPENR and RCC_AHBLPENR 中使能。注意,此时RCC_APBxENR 和 RCC_AHBENR 是可以关闭的
  • 4.system clock 必须降低
  • 5.LPSDSR 必须置1,也就是稳压器(regulator)必须是low-power mode。
  • 6.最后执行WFI/WFE
  • 7.注意,LP SLEEP下,所有IO状态不改变和 RUN mode 一致
  • 8.在WFI下,NVIC 接收到中断就会唤醒;在WFE下,非NVIC的外设中断可唤醒,或者M3 System Control register SEVONPEND 被使能,当从WFE唤醒后,所有的外设中断悬置(pending bit)和NVIC悬置位统统要清零。
  • 9.配置external or internal EXTI line (in event mode),当从WFE唤醒后没有设置event line的悬置位(pending bit)不要清空

 

 

转载于:https://www.cnblogs.com/zhanghonglang/p/8582229.html

你可能感兴趣的:(stm32 低功耗模式 学习总结)