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

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

暂无评论

发表评论

相关推荐

串口不定长接收

一、保留接收区和开启接收的语句    uint8_t buffer[5];HAL_UART_Transmit_IT(&huart1,buffer,3); 二、写入开启空闲中断的语句    __HAL_UART_ENABLE_IT(&huart

基于STM32单片机的电子密码锁设计

一.硬件方案 本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警