N32G031低功耗之Sleep模式
今天看N32G031 Sleep例程的时候,发现Sleep可以配置成两种状态,SLEEP_ON_EXIT和SLEEP_OFF_EXIT代码配置如下:
Delay(200);
DBG_ConfigPeriph(DBG_SLEEP, ENABLE); //sleep模式保持debug
printf("\r\n enter sleep mode \r\n");
PWR_EnterSLEEPMode(SLEEP_OFF_EXIT, PWR_SLEEPENTRY_WFI); //进入sleep模式老规矩,遇到有疑问的地方我们先看用户手册
在手册上我们可以看到,MCU通过执行 WFI(等待中断)或 WFE(等待事件)指令和 SLEEPDEEP = 0,进入 SEEP 模式。根据 Cortex-M0 系统控制寄存器中的 SLEEPONEXIT 位值,有两个选项可用于选择 SLEEP 模式进入机制:
1. Sleep-now: 如果SLEEPONEXIT位清零,那么WFI或WFE指令会立马执行,系统立即进入SLEEP模式。
2.Sleep-on-exit: 如果SLEEPONEXIT位置1,那么系统从最低优先级中断处理程序中退出时就立即进入SLEEP模式。
注意:在 SLEEP 模式下,所有 I/O 引脚保持与运行模式下相同的状态/功能。
今天的内容你记住了吗
还有一点,Sleep模式应该怎么退出呢?这里要分两种情况,MCU是通过WFI还是WFE进入Sleep的?
如果 WFI 指令用于进入 SLEEP 模式,那么嵌套的向量中断控制器(NVIC)所响应的任何外围中断都可以将设备从 SLEEP 模式中唤醒
如果使用 WFE 指令进入 SLEEP 模式,则 N32G031 将在事件发生时立即退出 SLEEP 模式。
页:
[1]