其他分享
首页 > 其他分享> > FreeRTOS操作系统——低功耗Tickless模式实验

FreeRTOS操作系统——低功耗Tickless模式实验

作者:互联网

FreeRTOS操作系统学习

文章目录

前言

一、低功耗模式实验

实验目的:
学习如何使用 FreeRTOS 的低功耗 Tickless 模式,观察 Tickless 模式对于降低系统功耗有无帮助。

实验设计:
对于功耗要求严格的场合一般不要求有太大的数据处理量,因为功耗与性能很难兼得。一般的低功耗场合都是简单的数据采集设备或者小型的终端控制设备。它们的功能都很简单,周期性的采集数据并且发送给上层,比如服务器,或者接收服务器发送来的指令执行相应的控制操作,比如开灯关灯、开关电机等。
本实验我们就设计一个通过串口发送指定的指令来控制开发板上的 LED1 和 BEEP 开关的实验

二、具体实验

1.低功耗相关函数

在FreeRTOSConfig.h中
在这里插入图片描述

主函数下:

//进入低功耗模式前需要处理的事情
//ulExpectedIdleTime:低功耗模式运行时间
void PreSleepProcessing(uint32_t ulExpectedIdleTime)
{
//关闭某些低功耗模式下不使用的外设时钟,此处只是演示性代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,DISABLE); (1)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,DISABLE);
}
//退出低功耗模式以后需要处理的事情
//ulExpectedIdleTime:低功耗模式运行时间
void PostSleepProcessing(uint32_t ulExpectedIdleTime)
{
//退出低功耗模式以后打开那些被关闭的外设时钟,此处只是演示性代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); (2)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); 
}

(1)、进入低功耗模式以后关闭那些低功耗模式中不用的外设时钟,本实验中串口 1 需要在低功耗模式下使用,因此 USART1 和 GPIOA 的时钟不能被关闭,其他的外设时钟可以关闭。这个要根据实际使用情况来设置,也可以在此函数中执行一些其他有利于降低功耗的处理。
(2)、退出低功耗模式以后需要打开函数 PreSleepProcessing()中关闭的那些外设的时钟。

这样就算配置完成了,只需要将不需要的外设关闭即可。

2.实验现象

1、开启 Tickless 模式
打开 Tickless 模式,也就是将宏 configUSE_TICKLESS_IDLE 设置为 1
在这里插入图片描述
2、关闭 Tickless 模式
关闭 Tickless 模式,将宏 configUSE_TICKLESS_IDLE 设置为 0
在这里插入图片描述
通过对比可以看出当开启了 FreeRTOS 的 Tickless 模式以后系统的工作电流降低了 163-116=47mA,功率降低了:836-595=241mW。

总结

以上只是 STM32芯片自身的睡眠模式带来的功耗收益,如果再配合硬件上的设计、选择其他低功耗模式那么功耗肯定会压到一个很低的水平。

标签:APB2PeriphClockCmd,FreeRTOS,Tickless,低功耗,模式,APB2Periph,RCC
来源: https://blog.csdn.net/qq_51963216/article/details/122775880