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

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

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

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

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

相关推荐
Jie_jiejiayou10 小时前
STM32F10xxx启动模式配置与ISP一键下载
stm32·isp·烧录模式
GilgameshJSS13 小时前
STM32H743-ARM例程33-TOUCH
c语言·arm开发·stm32·单片机·嵌入式硬件
我先去打把游戏先19 小时前
ESP32开发指南(基于IDF):连接AWS,乐鑫官方esp-aws-iot-master例程实验、跑通
开发语言·笔记·单片机·物联网·学习·云计算·aws
hazy1k19 小时前
51单片机基础-继电器实验
stm32·单片机·嵌入式硬件·51单片机·1024程序员节
kaka❷❷1 天前
STM32中 ESP8266 MQTT ModBus RS482 介绍
stm32·嵌入式硬件·智能路由器
hazy1k1 天前
51单片机基础-TFT LCD 显示(ILI9341,SPI 4线)
c语言·stm32·单片机·嵌入式硬件·51单片机
D.....l1 天前
STM32学习(MCU控制)(RS485 and ModBus)
stm32·单片机·学习
Jie_jiejiayou1 天前
按键防抖 — 工业级标准实现总结(STM32)
c语言·stm32·按键消抖
物联网牛七七1 天前
单片机中的中断
单片机·嵌入式硬件
小鱼儿电子1 天前
46-基于STM32的智能宠物屋设计与实现
stm32·腾讯云·宠物屋·智能宠物屋