STM32低功耗Tickless模式

一、STM32低功耗模式

  1. 电池类产品,一般要求低功耗设计,比如农业物联网的节点采集设备
  2. 低功耗设计,除了MCU,软件硬件设计同等重要,以STC15低功耗实战为例说明
  3. Tickless模式主要针对睡眠模式当然,也可以自行使用停机模式,待机模式
  4. 由于STM32物联网实战板的硬件没有低功耗设计,本例程只讲解Tickless模式原理与应用
  5. STM32的3种低功耗详细讲解与应用编程,直接观看stm32物联网实战的视频,不再重复讲解

本次重点讲解FreeRTOS的Tickless模式

对于操作系统Freertos来说是使用睡眠模式的,停机和待机也可以用在操作系统上,但是需要修改代码

Freertos使用的是睡眠模式中的WFI模式,这是因为systick中断可以唤醒系统

二、Tickless模式

Tickless 低功耗机制是当前小型 RTOS 所采用的通用低功耗方法,比如FreeRTOS,RTX 和 uCOS-I等

Tickless 是怎样一种模式呢?

仅从字母上看,Tick 是滴答时钟的意思,less 是 Tick 的后缀,表示较少的,整体看就是表示减少滴答时钟节拍运行。

在FreeRTOS系统中,当用户任务都被挂起或者阻塞时,最低优先级的空闲任务会得到执行。那么STM32 支持的低功耗模式就可以放在空闲任务里面实现。为了实现低功耗最优设计,我们还不能直接把睡眠模式放空闲任务,因为Tick中断停止,将导致无法及时运行阻塞超时的任务,所以不能关闭Tick中断也就是不能直接失眠,进入空闲任务后,首先要计算可以执行低功耗的最大时间,也就是求出下一个要执行的高优先级任务还剩多少时间。然后就是把低功耗的唤醒时间设置为这个求出的时间(其实就是重载Systick),如果没有其它中断或事件唤醒STM32,到时间后Systick中断会将STM32唤醒,继续执行任务。

这个就是所谓的 Tickless 模式。从上面的讲解中可以看出,实现Tickless模式最麻烦的是计算低功耗可以执行的时间。这个难题,FreeRTOS 已为我们做好。

2、Tickless模式配置

① 将宏定义configUSE_TICKLESS_IDLE设置为1即可

② 配置 configEXPECTED_IDLE_TIME_BEFORE_SLEEP,只有当系统可运行于低功耗模式的时钟节拍数大于等于这个参数时,系统才可以进入到低功耗模式。

看一下前面的代码

先计算出来低功耗的时间:xExpectedIdleTime = prvGetExpectedIdleTime();

然后判断这个计算的时间是否大于这个参数

此参数已在 FreeRTOS.h文件中定义了,默认为2,用户可以自定义时,不能小于2

三、程序

  1. 如何在进入低功耗模式前关闭外设,退出模式后恢复,进一步降低系统功耗
  2. 如何在Tickless框架中应用待机与停机模式

1、首先系统初始化之后就会启动rtos内核

2、然后启动空闲任务

在空闲任务中监测是否开启了低功耗Tickless模式,也就是前面说的configUSE_TICKLESS_IDLE宏

以上这部分不需要我们去管,我们只需要修改前面说的两个宏

正式编程

1、STM32cubeMX配置

开启低功耗模式

2、configEXPECTED_IDLE_TIME_BEFORE_SLEEP设置

尽量不要在源码里面修改

我们可以在配置文件.h中进行修改,这样修改,后面我们在cubmx中再重新生成的话也不会被覆盖

3、在进入与退出Tickless模式时增加代码,通常是关闭外设等,此例程是关闭数码管显示,作为演示用。

进入低功耗和退出低功耗都会进入这两个函数,所以我们要在这两个函数中加入操作

需要处理这两个函数,第一个函数就是处理进入睡眠模式前,在里面关闭外设和时钟等。第二个函数中就需要恢复

比如这里我们在函数中加入关闭数码管

数码管的刷新任务中有这个获取任务通知,当任务中获取到了任务通知,会更新数码管,让数码管亮起来,当进入休眠的时候,又会关闭数码管,这样数码管就会一闪一闪的,但是如果时间太短,人眼无法看到,所以要想办法能够看到,办法就是在获取任务通知之前延时几十毫秒

相关推荐
嵌入式小站4 分钟前
STM32 可移植教程 03:USART 串口通信——让开发板能“对话“(实战篇)
stm32·单片机·嵌入式硬件
踏着七彩祥云的小丑1 小时前
嵌入式测试学习第35 天:蓝牙、WiFi嵌入式设备测试基础概念
单片机·嵌入式硬件·学习
CQU_JIAKE1 小时前
6.13【A】
单片机·嵌入式硬件
Mr..Jackey10 小时前
瑞佑 RUI Builder 图形化 UI 设计工具
arm开发·人工智能·单片机·ui·人机交互·ra8889·lcd控制芯片
西城微科方案开发13 小时前
多品类电子秤一体化PCBA整体方案
单片机·嵌入式硬件·电子秤
火花页.14 小时前
【正点原子ZYNQ领航者7020】PS端GPIO中断→按键控制LED实验
单片机·嵌入式硬件
ye1501277745514 小时前
4.2V升6V1A同步升压WT3213
单片机·嵌入式硬件·其他·硬件工程
嵌入式小站15 小时前
STM32 可移植教程 02:按键状态机,消抖、长按、释放一行也不用多写(实战篇)
chrome·vscode·stm32·单片机·嵌入式硬件
Szime15 小时前
AD9694 国产替代方案:四通道高速 ADC 在通信与雷达项目中的选型参考
单片机·嵌入式硬件·fpga开发
Zyed17 小时前
[STM32]Day15读写FLASH+读取ID
前端·stm32·性能优化