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芯片自身的睡眠模式带来的功耗收益,如果再配合硬件上的设计、选择其他低功耗模式那么功耗肯定会压到一个很低的水平。

版权声明:本文为CSDN博主「我与nano」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51963216/article/details/122775880

生成海报
点赞 0

我与nano

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配

stm32cubemx+HAL+串口接收中断

stm32cubemxHAL串口接收中断 在cubemx配置完串口和global interrupt后需要在keil中添加如下代码。 第一步:在main函数中添加接收中断标志位开启函数 HAL_UART_Receive_IT