当前位置: 首页 > article >正文

STM32 FreeROTS Tickless低功耗模式

低功耗模式简介

FreeRTOS 的 Tickless 模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。在 Tickless 模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功耗。在滴答中断重启时,会对 RTOS 滴答计数值进行校正调整。

Tickless模式的实现方式通常依赖于微控制器的硬件特性,尤其是低功耗定时器实时时钟单元。以下是 Tickless 模式的一般工作原理:

1、空闲任务检测:FreeRTOS 会通过空闲任务(Idle Task)来检测系统是否有任务需要执行。如果没有任务需要执行,系统可以进入休眠状态。

2、时钟中断:当有任务需要执行时,系统会启动时钟中断,唤醒处理器。

3、时钟中断处理:在时钟中断处理函数中,FreeRTOS 将检查任务的状态并决定是否继续执行。

4、休眠状态:如果没有任务需要执行,系统可以进入休眠状态,关闭时钟中断。在休眠状态下,处理器可以进入更低功耗的模式。

5、任务唤醒:当有任务需要执行时,系统会再次启动时钟中断,唤醒处理器,然后执行相应的任务。

在 Tickless 模式下,系统的时钟中断频率明显降低,从而降低了系统的平均功耗。Tickless 模式适用于那些对功耗要求较高、需要长时间运行在低功耗状态的嵌入式系统。比如:电池驱动设备、物联网(IoT)设备、低功耗传感器节点、无线通信模块等。

Tickless模式详解

STM32F103xC、STM32F103xD和STM32F103xE增强型产品支持三种低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。

1、睡眠模式(Sleep Mode)

只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。

2、停机模式(Stop Mode)

在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。在停机模式下,停止所有内部1.8V部分的供电,PLL、HSI的RC振荡器和HSE晶体振荡器被关闭,调压器可以被置于普通模式或低功耗模式。可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部I/O 口之一、PVD的输出、RTC闹钟或USB的唤醒信号。

3、待机模式(Standby Mode)

在待机模式下可以达到最低的电能消耗。内部的电压调压器被关闭,因此所有内部1.8V部分的供电被切断;PLL、HSI的RC振荡器和HSE晶体振荡器也被关闭;进入待机模式后,SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。从待机模式退出的条件是:NRST上的外部复位信号、IWDG复位、WKUP引脚上的一个上升边 沿或RTC的闹钟到时。

注意:在进入停机或待机模式时,RTC、IWDG和对应的时钟不会被停止

主要使用睡眠模式任何中断事件都可以唤醒睡眠模式。Tickless低功耗模式通过调用指令 __WFI 实现睡眠模式

FreeRTOS系统中的所有其它任务都不在运行时(处于阻塞或挂起),会运行空闲任务。所以想不影响系统运行又降低功耗,可以在空闲任务执行的期间,让MCU 进入相应的低功耗模式。

由于滴答定时器频繁中断则会影响低功耗,所以FreeRTOS的Tickless低功耗模式会自动把滴答定时器的中断周期修改为低功耗运行时间,退出低功耗后再补上系统时钟节拍数。

Tickless模式相关配置项

配置项

说明

configUSE_TICKLESS_IDLE

使能低功耗 Tickless 模式,默认0

configEXPECTED_IDLE_TIME_BEFORE_SLEEP

系统进入相应低功耗模式的最短时长,默认2

configPRE_SLEEP_PROCESSING(x)

在系统进入低功耗模式执行的事务,比如关闭外设时钟

configPOST_SLEEP_PROCESSING(x)

系统退出低功耗模式执行的事务,比如开启之前关闭的外设时钟


http://www.kler.cn/a/511147.html

相关文章:

  • 解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
  • 浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
  • AI在SEO中的关键词优化策略探讨
  • 用 Python 自动化处理日常任务
  • 简历_使用优化的Redis自增ID策略生成分布式环境下全局唯一ID,用于用户上传数据的命名以及多种ID的生成
  • UDP报文格式
  • Python爬虫指南
  • 软件测试—— 接口测试(HTTP和HTTPS)
  • Linux-day08
  • idea本地jar包添加到项目的maven库 mvn install:install-file
  • 聊聊如何实现Android 放大镜效果
  • Elasticsearch 和arkime 安装
  • 蓝桥杯 Python 组知识点容斥原理
  • 物联网与前沿技术融合分析
  • MySQl:使用C语言连接数据库
  • SQL Server执行计划的步骤对应于查询优化器执行给定SQL查询的部分和优化策略
  • md中的特殊占位文件路径的替换
  • Qt开发技术【C++ 实现类的二进制序列化与反序列化】
  • 使用vcpkg安装c++库时出现git网络连接报错的解决方案
  • LeetCode:46.全排列
  • doris:Kafka 导入数据
  • 异地IP属地代理业务解析:如何改变IP属地
  • 日志技术-LogBack入门程序Log配置文件日志级别
  • 满足不同场景的需求的智慧物流开源了
  • 和鲸科技受邀出席 2024(第四届)“风电领跑者”技术创新论坛
  • @Bean 控制 Spring Bean 生命周期