STM32超低功耗入门之停止模式

一. 认识停止模式

STM32L4 系列提供了 3 种停止模式:stop0 , stop1 , stop2. 功耗逐次更低。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过上图可以得出结论:

  1. stop0 模式有 2 种电压调节器方案。stop 1 2 只有一种
  2. 在 stop0 1 2 模式下 CPU 是停止状态
  3. 在 stop0 1 2模式下 FLASH 已经断电
  4. SRAM1 SRAM2 可以独立的开启或关闭
  5. 时钟只可以使用 LSE 或者 LSI
  6. 支持的外设有限,对于不常见的外设,表1 给出说明
  7. 唤醒的方式,常见的外设中断都可以唤醒 MCU
  8. 功耗情况 stop0 , stop1 , stop2. 功耗逐次更低
  9. 在 SRAM 运行的程序唤醒速度更快

stop 0 两种电压调节器的方案说明如下:
在这里插入图片描述
表1:

外设功能
BORBrown out reset 掉电复位
PVDProgrammable voltage detector 可编程电压监测器
PVMPVM:Peripheral Voltage Monitor 外围电压检测

由以上的资料可以知道,不同的 STOP 模式支持大部分功能都是相同的,区别就是表中,进入停止模式之后的外设支持以及唤醒方式,最终也就导致的功耗的不同。

二. 停止模式的进入

在这里插入图片描述
SRAM 中的数据不丢失。但是核心域的时钟都停止了,PLL ,MSI , HSI16 , HSE都不能使用了。LSI 和 LSE 继续保持运行。
通过上面的描述可以知道:大部分外设的时钟已经停止了,所以进入 STOP 模式之前不需要关闭 systick 的中断,但是唤醒之后需要重新配置时钟.

进入停止模式的方法很简单,不同模式的 API 也不一样,但是传入的参数是一样的。

  1. STOP0 进入 API void HAL_PWREx_EnterSTOP0Mode(uint8_t STOPEntry)
  2. STOP1 进入 API void HAL_PWREx_EnterSTOP1Mode(uint8_t STOPEntry)
  3. STOP2 进入 API void HAL_PWREx_EnterSTOP2Mode(uint8_t STOPEntry)

这里的参数有两个可以设置:

  1. PWR_STOPENTRY_WFI
  2. PWR_STOPENTRY_WFE

这两个参数决定了是事件唤醒还是中断唤醒。这个参数在各种模式下都要用到。

三. 停止模式的进入代码

进入睡眠模式的代码实现

int main(void)
{
  HAL_Init();

  SystemClock_Config();
  MX_GPIO_Init();

  HAL_Delay(500); // 上电之后延时一会再进入睡眠模式,这样可以保证复位之后可以立即下载程序
  
  HAL_PWREx_EnterSTOP0Mode(PWR_STOPENTRY_WFI); // 进入停止模式
  //HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
  //HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
  SystemClock_Config(); // 重新设置时钟
  
  while (1)
  {
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_13);
      HAL_Delay(500);
  }
}

代码解析:

  1. 进入停止模式后将导致调试器无法识别到 MCU,所以在启动的时候加了一个 HAL_Delay(500) ,如果没有加,则需要按住复位键点击下载,点击下载之后立即松开复位键,就可以正常的下载程序了。
  2. 停止模式将关闭很多的时钟其中包括 systick, 所以进入停止模式时不需要关闭 systick
  3. 进入停止模式的 API 只有一字之差
  4. 唤醒 MCU 之后,将执行进入睡眠模式的下一个指令。但是要重新配置时钟

停止模式支持 WFIWFE
WFI: 立刻进入低功耗模式
WFE: 不是立刻进入低功耗模式,根据Event Register(一个单bit的寄存器,每个PE一个)的状态,有两种情况:如果Event Register为1,该指令会把它清零,然后执行完成(不会standby)
选择 WFE 可是使用如下代码

HAL_PWREx_EnterSTOP0Mode(PWR_SLEEPENTRY_WFE);
HAL_PWREx_EnterSTOP1Mode(PWR_SLEEPENTRY_WFE);
HAL_PWREx_EnterSTOP2Mode(PWR_SLEEPENTRY_WFE);

四. 总结

  1. 进入停止模式是 MCU 停止,唤醒之后需重重新配置时钟
  2. 停止模式唤醒后,无需对外设重新进入初始化
  3. 停止模式支持 中断唤醒事件唤醒
  4. 可用外设有限,具体查看上图
  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值