第16章 低功耗TickLess
约 312 字大约 1 分钟
2026-01-19
概述:
FreeRTOS 的 Tickless 模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。
在 Tickless 模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功耗。
案例需求
任务1: 每次循环都阻塞延时1000ms
需要注意的是,低功耗模式无法测试,只能通过调试源码的方式判断是否真正进入了低功耗模式。相关宏
configUSE_TICKLESS_IDLE 是否启动 Tickless 模式,默认0
configEXPECTED_IDLE_TIME_BEFORE_SLEEP 系统进入 Tickless 模式的最短时长,默认 2
configPRE_SLEEP_PROCESSING( x ) 在系统进入 Tickless 模式前执行的事务,比如关闭外设时钟
configPOST_SLEEP_PROCESSING( x ) 系统退出 Tickless 模式后执行的事务,比如开启之前关闭的外设时钟configPRE_SLEEP_PROCESSING() 和 configPRE_SLEEP_PROCESSING() 能够接收到 xModifiableIdleTime 作为参数,xModifiableIdleTime 表示系统进入低功耗后预计休眠的时钟节拍数,其最大值限制如下:
portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;
#ffffff / (72000000/1000) ≈ 233HAL 库开启关闭GPIO外设时钟的函数:
__HAL_RCC_GPIOA_CLK_DISABLE()
__HAL_RCC_GPIOB_CLK_DISABLE()
__HAL_RCC_GPIOC_CLK_DISABLE()
__HAL_RCC_GPIOD_CLK_DISABLE()
__HAL_RCC_GPIOE_CLK_DISABLE()
__HAL_RCC_GPIOF_CLK_DISABLE()
__HAL_RCC_GPIOG_CLK_DISABLE()
__HAL_RCC_GPIOA_CLK_ENABLE()
__HAL_RCC_GPIOB_CLK_ENABLE()
__HAL_RCC_GPIOC_CLK_ENABLE()
__HAL_RCC_GPIOD_CLK_ENABLE()
__HAL_RCC_GPIOE_CLK_ENABLE()
__HAL_RCC_GPIOF_CLK_ENABLE()
__HAL_RCC_GPIOG_CLK_ENABLE()