一. 认识停止模式
STM32L4 系列提供了 3 种停止模式:stop0 , stop1 , stop2. 功耗逐次更低。
通过上图可以得出结论:
- stop0 模式有 2 种电压调节器方案。stop 1 2 只有一种
- 在 stop0 1 2 模式下 CPU 是停止状态
- 在 stop0 1 2模式下 FLASH 已经断电
- SRAM1 SRAM2 可以独立的开启或关闭
- 时钟只可以使用 LSE 或者 LSI
- 支持的外设有限,对于不常见的外设,表1 给出说明
- 唤醒的方式,常见的外设中断都可以唤醒 MCU
- 功耗情况 stop0 , stop1 , stop2. 功耗逐次更低
- 在 SRAM 运行的程序唤醒速度更快
stop 0 两种电压调节器的方案说明如下:
表1:
外设 | 功能 |
---|---|
BOR | Brown out reset 掉电复位 |
PVD | Programmable voltage detector 可编程电压监测器 |
PVM | PVM:Peripheral Voltage Monitor 外围电压检测 |
由以上的资料可以知道,不同的 STOP 模式支持大部分功能都是相同的,区别就是表中,进入停止模式之后的外设支持以及唤醒方式,最终也就导致的功耗的不同。
二. 停止模式的进入
SRAM 中的数据不丢失。但是核心域的时钟都停止了,PLL ,MSI , HSI16 , HSE都不能使用了。LSI 和 LSE 继续保持运行。
通过上面的描述可以知道:大部分外设的时钟已经停止了,所以进入 STOP 模式之前不需要关闭 systick 的中断,但是唤醒之后需要重新配置时钟.
进入停止模式的方法很简单,不同模式的 API 也不一样,但是传入的参数是一样的。
- STOP0 进入 API
void HAL_PWREx_EnterSTOP0Mode(uint8_t STOPEntry)
- STOP1 进入 API
void HAL_PWREx_EnterSTOP1Mode(uint8_t STOPEntry)
- STOP2 进入 API
void HAL_PWREx_EnterSTOP2Mode(uint8_t STOPEntry)
这里的参数有两个可以设置:
- PWR_STOPENTRY_WFI
- 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);
}
}
代码解析:
- 进入停止模式后将导致调试器无法识别到
MCU
,所以在启动的时候加了一个HAL_Delay(500)
,如果没有加,则需要按住复位键点击下载,点击下载之后立即松开复位键,就可以正常的下载程序了。 - 停止模式将关闭很多的时钟其中包括 systick, 所以进入停止模式时不需要关闭 systick
- 进入停止模式的 API 只有一字之差
- 唤醒
MCU
之后,将执行进入睡眠模式的下一个指令。但是要重新配置时钟
停止模式支持 WFI
和 WFE
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);
四. 总结
- 进入停止模式是
MCU
停止,唤醒之后需重重新配置时钟 - 停止模式唤醒后,无需对外设重新进入初始化
- 停止模式支持 中断唤醒 和 事件唤醒
- 可用外设有限,具体查看上图