系列文章目录
文章目录
- 系列文章目录
- 低功耗模式
- Tickless低功耗模式
- 宏定义配置
- 实验测试
低功耗模式
在之前的逻辑开发中学习过STM32的低功耗模式,在FreeRTOS中的低功耗模式,方便操作系统进入低功耗模式。
stm32中的低功耗模式:
Tickless低功耗模式
本质是调用指令WFI实现睡眠模式,在在整个系统的运行过程中,其实大部分时间是在执行空闲任务的,所以在空闲的时候进入低功耗,在其他任务准备运行的时候再退出低功耗模式。
运行方式:
进入低功耗后,获取到下一个任务的进入时间,就设置低功耗的退出时间,为了防止滴答定时器的中断唤醒MCU,频繁中断影响效果,将滴答定时器的中断周期修改为低功耗的运行时间,退出低功耗模式后,再补上节拍数
宏定义配置
configUSE_TICKLESS_IDLE
此宏用于使能低功耗 Tickless 模式
configEXPECTED_IDLE_TIME_BEFORE_SLEEP
此宏用于定义系统进入相应低功耗模式的最短时长(>1)
configPRE_SLEEP_PROCESSING(x)
此宏用于定义需要在系统进入低功耗模式前执行的事务,如:进入低功耗前关闭外设时钟,以达到降低功耗的目的
configPOSR_SLEEP_PROCESSING(x)
此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行
实验测试
开启宏定义
默认事件设置:
需要对这两个函数重新定义:在文件中,如果对这两个宏没有定义的话会自己定义,所以我们需要提前定义,编译器就会自动识别为我们定义的函数。
在开头直接提前定义
在main文件中记得包含该文件;
设置进入休眠后我们的操作即可;还可以关闭其他的外设来降低功耗
代码:
#define configPRE_SLEEP_PROCESSING( x ) PRE_SLEEP_PROCESSING()
#define configPOST_SLEEP_PROCESSING( x ) POST_SLEEP_PROCESSING()/* 进入低功耗前所需要执行的操作 */
void PRE_SLEEP_PROCESSING(void)
{__HAL_RCC_GPIOA_CLK_DISABLE();__HAL_RCC_GPIOB_CLK_DISABLE();__HAL_RCC_GPIOC_CLK_DISABLE();__HAL_RCC_GPIOD_CLK_DISABLE();
}
/* 退出低功耗后所需要执行的操作 */
void POST_SLEEP_PROCESSING(void)
{__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();
}