»
(008)CubeIDE实现USB外设*
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
(043)STM32进入低功耗模式
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复位
文学扩展:探路者号停止了所有的功能,等待着将来的某一时刻被重启