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

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

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

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

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

相关推荐
研猛男5 小时前
0、FreeRTOS编码和命名规则
笔记·stm32·freertos
点灯小铭6 小时前
基于单片机的自动存包柜设计
数据库·单片机·mongodb·毕业设计·课程设计
学生董格8 小时前
[嵌入式embed]RT-ThreadStudio-STM32F103C8T6(江协科技)+移植RT-Thread v4.11模版
科技·stm32·嵌入式硬件
萧技电创EIIA9 小时前
基于stc12单片机的PID恒温烙铁设计
单片机·嵌入式硬件·pid过程控制
光子物联单片机10 小时前
STM32G474单片机开发入门(八)内部FLASH详解及读写实战
stm32·单片机·嵌入式硬件·mcu
BreezeJuvenile11 小时前
通用定时器_输入捕获介绍及案例实操
stm32·单片机·嵌入式硬件·输入捕获·通用定时器
时空自由民.12 小时前
无人机系统耗电,低功耗管理问题解决方法(chatgpt)
单片机·嵌入式硬件·无人机
时空自由民.12 小时前
无人机系统耗电,低功耗管理问题解决方法(腾讯元宝)
单片机·嵌入式硬件·无人机
清风66666613 小时前
基于单片机的双档输出数字直流电压源设计
单片机·mongodb·毕业设计·nosql·课程设计