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模式时增加代码,通常是关闭外设等,此例程是关闭数码管显示,作为演示用。

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

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

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

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

相关推荐
智购科技自动贩卖机31 分钟前
自动售货机硬件主控方案选型实战:单片机、树莓派、ESP32怎么选?
人工智能·单片机·嵌入式硬件·物联网·网络协议·yolo·架构
WWJA王文举2 小时前
# STM32使用DMA后数据异常?可能不是DMA配置问题:从缓存、变量类型、时序到外设状态全面排查
stm32·嵌入式硬件·缓存
电化学仪器白超2 小时前
MV-CS200-10UC相机参数配置
python·单片机·嵌入式硬件·数码相机·自动化·ltspice
我和头发拼了2 小时前
STM32--9USART收发HEX数据包
stm32·单片机·嵌入式硬件
wuyk5552 小时前
7.AVL 树:第一个自平衡二叉搜索树
开发语言·stm32·单片机·算法
国科安芯3 小时前
星载网络化控制的总线脊梁:四路CANFD在分布式载荷管理中的架构优势
分布式·单片机·嵌入式硬件·架构·系统架构·canfd·低轨卫星星座
树的枝3 小时前
【STM32】05.TIM定时器
笔记·stm32·单片机·嵌入式硬件
caimouse3 小时前
ReactOS 图形系统分析(50):画笔子系统 — pen.c
c语言·开发语言·stm32
硅农深芯4 小时前
PDN仿真显示高频阻抗大意味着什么?
单片机·嵌入式硬件·pdn·阻抗·pi仿真
lingzhilab4 小时前
零知派——STM32F103驱动ST7789与INA219太阳能充电功率实时监测系统
stm32·单片机·嵌入式硬件