一、STM32 低功耗模式讲解
①电池类产品,一般要求低功耗设计,比如农业物联网的节点采集设备
②低功耗设计,除了 MCU,软件, 硬件设计同等重要,以 STC15 低功耗实战为例说明
③Tickless 模式主要针对睡眠模式,当然,也可以自行使用停机模式,待机模式
④ 由于 STM32 物联网实战板的硬件没有低功耗设计,本例程只讲解 Tickless 模式原理与应用
⑤ STM32 的 3 种低功耗详细讲解与应用编程,直接观看 stm32 物联网实战的视频,不再重复讲解,本例程重点讲解 FreeRTOS 的 Tickless 模式
STM32 物联网实战有详细讲解,B 站播放视频。
二、Tickless 模式介绍
2.1、Tickless 模式介绍
Tickless 低功耗机制是当前小型 RTOS 所采用的通用低功耗方法,比如 FreeRTOS,RTX 和 uCOS-III 等。
Tickless 是怎样一种模式呢?
仅从字母上看,Tick 是滴答时钟的意思,less 是 Tick 的后缀,表示较少的,整体看就是表示减少滴答时钟节拍运行。
在 FreeRTOS 系统中,当用户任务都被挂起或者阻塞时,最低优先级的空闲任务会得到执行。那么 STM32 支持的低功耗模式就可以放在空闲任务里面实现。为了实现低功耗最优设计,我们还不能直接把睡眠模式放在空闲任务就可以了。由于 Tick 中断停止,将导致无法及时运行阻塞超时的任务,进入空闲任务后,首先要计算可以执行低功耗的最大时间,也就是求出下一个要执行的高优先级任务还剩多少时间。然后就是把低功耗的唤醒时间设置为这个求出的时间 (其实就是重载 Systick),如果没有其它中断或事件唤醒 STM32,到时间后 Systick 中断会将 STM32 唤醒,继续执行任务。
这个就是所谓的 Tickless 模式。从上面的讲解中可以看出,实现 Tickless 模式最麻烦的是计算低功耗可以执行的时间。这个难题,FreeRTOS 已为我们做好。
2.2、Tickless 模式配置
① 将宏定义 configUSE_TICKLESS_IDLE 设置为 1 即可
② 配置 configEXPECTED_IDLE_TIME_BEFORE_SLEEP,只有当系统可运行于低功耗模式的时钟节拍数大于等于这个参数时,系统才可以进入到低功耗模式。
此参数已在 FreeRTOS.h 文件中定义了,默认为 2,用户可以自定义时,不能小于 2
三、Tickless 模式源码分析
1、阅读源码
2、讲讲如何在进入低功耗模式前关闭外设,退出模式后恢复,进一步降低系统功耗
3、讲讲如何在 Tickless 框架中应用待机与停机模式