Lazy loaded image
三、应用示例
Words 1907Read Time 5 min
2025-5-12

参考资料

  1. 在RT-Thread潘多拉开发板上实现电源管理
 
 
notion image
 

3.1 RTC + Stop Mode[5]

进低功耗前的配置:
  1. 如果有独立看门狗,需要在上电初始化时,通过修改FLASH寄存器的相关位,使看门狗在进入stop模式后停止计数,就不会引起看门狗复位了
  1. 对应的外设SPI,调用对应外设的对应DeInit函数,要注意的是17版的库,SPI的DeInit函数有BUG,需要按照我另一篇文章(STM32L4退出低功耗后SPI读写出错)进行修改,不然低功耗唤醒后,SPI读写会异常调用函数:
    1. 外设ADC,需要关闭,不然会增加功耗,
    1. usart 关闭调用函数:
      1. 定时器,可以关闭也可以不关闭,不受影响 调用函数: HAL_TIM_Base_Stop_IT(&htim2);
      1. GPIO配置,所有管脚设置为模拟输入模式,降低功耗
      1. 设置唤醒管脚和RTC唤醒时钟
      1. 调用进入低功耗的函数,进低功耗
       
      出低功耗后的配置:
      1. 恢复时钟配置(若是用的MSI时钟可以不进行配置)
        1. 注意:与睡眠模式不一样,系统从停止模式被唤醒时,是使用 HSI 作为系统时钟的,在 STM32F407 中,HSI 时钟一般为 16MHz,与我们常用的 168MHz 相关太远,它会影响各种外设的工作频率。所以在系统从停止模式唤醒后,若希望各种外设恢复正常的工作状态,就要恢复停止模式前使用的系统时钟。
      1. GPIO初始化
      1. 配置外设SPI,USART,ADC,定时器,并开启中断
        1. 关闭 RTC 周期唤醒(防止在程序正常运行时,进入RTC周期唤醒中断)
           

          3.2 uart 中断 + stop mode

          外部中断也可以用来唤醒MCU,需要提供一个下降沿用以把MCU从低功耗中唤醒
          以直接使用串口的RX作为外部中断引脚唤醒,使用串口3的RX也即是PB11引脚。
          需要先配置IO口为外部中断模式:
          notion image
          在进入低功耗模式之前一定要先配置,这样才能够正常唤醒。
           

          3.3 调试模式

          1. 打印信息
          1. 进入低功耗调试模式
              • 全速运行, 可以看到debug连接没有断掉, 此时进入了低功耗函数
              • 可以通过调试窗口的stop来验证, 可以看到一直停在下面WFI里
              • stop之后再单步或者全速运行, 就会从WFI跳出继续向下运行。 所以执行_WFI()函数时, 必须是全速执行, 不可以单步执行。
              调试模式时独立看门狗问题
              __HAL_DBGMCU_FREEZE_IWDG() 冻结看门狗,此时在调试模式下看门狗就不会复位
              __HAL_DBGMCU_UNFREEZE_IWDG()恢复看门狗

          总结

          设计低功耗主要从以下几方面着手:
          1、用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。可以使用的低功耗方式有休眠模式,待机模式,停机模式。
          2、选择了低功耗方式后就是关闭可以关闭的外设时钟。
          3、降低系统主频。
          4、注意I/O的状态。
          如果此 IO 口带上拉,请设置为高电平输出或者高阻态输入;
          如果此 IO 口带下拉,请设置为低电平输出或者高阻态输入;
          5、注意 IO 和 外设IC 的链接。
          6、测低功耗的时候,一定不要连接调试器,更不能边调试边测电流。
          7、只能保证单片机在休眠期间的功耗,至于电路板上的其他IC、电阻、电容的功耗不是单片机程序能控制的,所以首先要在电路板上实现一个单片机最小系统来做测试。具体就是电路板只贴单片机及其最小依赖的外围元器件,把程序灌入单片机,观察单片机的休眠功耗。
           
          功耗主要来自这几个地方:
          1. HSE / LSE 的外部晶振功耗肯定比相对应的HSI / MSI / LSI要高
          1. 尽量关闭PLL,这个东西消耗电流达到了200uA
          1. 运行主频是很耗电的,够用就好,尽量使用HSE 4M的方式,实际中我使用8M进行分频的
          1. HCLK也很耗电,对其分频可以节省电能
          1. 电压也与功耗 有关,虽然关系不大,也是可见的关系,3.3V比1.8V的电压,功耗还是大了很多
          1. 外部功耗大硬件电路可以设计MOS管进行开关控制,用到时打开,休眠考虑关闭
          1. 启动方式可能会影响功耗?目前时从Flash中启动,从SRAM启动应该功耗会低一点。目前没做测试,有待更新
           
           
           
           

          FAQs

          1. 无法烧录系统
          注意:当系统处于睡眠模式低功耗状态时(包括后面讲解的停止模式及待机模式),使用DAP下载器是无法给芯片下载程序的,所以下载程序时要先把系统唤醒。或者使用如下方法:按着板子的复位按键,使系统处于复位状态,然后点击电脑端的下载按钮下载程序,这时再释放复位按键,就能正常给板子下载程序了。
          2. 滴答定时器启动和停止
          有报道是滴答定时器会将单片机从停止模式唤醒,可以使用暂停滴答时钟避免。
          3. STM32F4低功耗待机模式周期性唤醒问题 - STM32F429 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
          上一篇
          宏的用法
          下一篇
          Guide to Linux System

          Comments
          Loading...