»
(008) CubeIDE Implementation of USB Peripherals*
(018) C99 pointer*
(019) C99 With only value assignment*
(022) POSIX pthread multi-threads mutex*
(023) POSIX pthread multi-threads programming*
(027) C99 time and wait*
(028) High-precision calculation with GMP*
(029) Web Service Lib*
(030) International Components for Unicode (ICU)*
(031) Performance of C is higher than C++, because...*
(043) STM32 enter low power comsuption mode
STM32进入低功耗模式(睡眠模式)的方法:
一、裸机手动调用直接进入
1)WFI等待外部中断唤醒:
__WFI()
当执行WFI指令后,ARM核心会立即进入低功耗待机状态,直到有中断服务事件发生。WFI适用于需要等待外部中断的场景。
2)WFE等待事件唤醒:
__WFE();
依赖于一个单比特的事件寄存器。如果事件寄存器的值为0,WFE会进入低功耗待机状态,等待事件发生;如果事件寄存器的值为1,WFE会立即执行完成,不会进入待机状态。WFE特别适用于多核环境中的同步操作。
二、FreeRTOS IDLE任务等待1Tick自动进入睡眠模式
智能问答:FreeRTOS提供了一个名为Tickless低功耗模式的功能,该模式可以在系统空闲时自动进入睡眠模式以降低功耗。
三、裸机开发过程:
在STM32CubeMX中配置PB9为GPIO_EXTI9硬件中断,GPIO模式为上升沿触发扩展中断模式
完成中断处理函数:
void EXTI9_5_IRQHandler(void){
}
在主while循环中调用:
__WFI()
四、FreeRTOS开发过程:
定义中断处理函数即可实现产生中断时直接退出睡眠模式。
五、STM32退出低功耗模式(睡眠模式)的方法:
1)有中断调用时直接退出低功耗模式
2)有等待事件发生时退出低功耗模式
六、唤醒延时:
无延时
七、等待中断睡眠模式低功耗原理:
CPU停止运行,外设正常运行,等待中断或事件调用
注:定时器不是CPU的一部分。
扩展:
STM32裸机或FreeRTOS退出睡眠模式的方法:
1)任何中断或事件都可以唤醒
文学扩展:为了节省能源,探路者号关闭了主耗能设备
STM32裸机或FreeRTOS进入停机模式(深度睡眠)的方法:
1)将SLEEPDEEP置为1;
2)将PWR_CR的PDDS清零;
3)配置PWR_CR的LPDS为调压器模式;
4)开发用于唤醒的中断模式的EXTI扩展中断线及中断处理函数或者开发用于唤醒的事件模式的EXIT扩展中断线及中断处理函数
5)调用WFI或WFE
指定的外部中断、RTC、IWDG复位可以唤醒
文学扩展:探路者号开始停机、进入长期休眠模式
STM32裸机或FreeRTOS进入待机模式(最低功耗模式)的方法:
1)将SLEEPDEEP置为1;
2)将PWR_CR的PDDS置为1;
3)将PWR_CSR的WUF清零;
4)将所选唤醒源(RTC闹钟、RTC唤醒、RTC入侵或RTC时间戳标志)对应的RTC标志清零;
5)调用WFI或WFE
特殊的退出过程:WKUP引脚上升沿或RTC唤醒源或NRST引脚复位或IWDG复位
文学扩展:探路者号停止了所有的功能,等待着将来的某一时刻被重启