前言
不必害怕未知,无需恐惧犯错,做一个Creator!
本文主要介绍STM32_HAL库开发中低功耗唤醒的使用。
一、开发步骤
1.STM32CubeMX配置
- 在左侧引脚配置处勾选RTC进行配置
- 在RTC模式处勾选“Wakeup”唤醒使能RTC唤醒模式
- 在RTC参数配置处进行参数配置:RTC时钟、Wakeup唤醒时钟、Wakeup唤醒计数器以及勾选”NVIC Settings”使能外部中断
2.进低功耗程序编写
void startSleep(uint32_t _RTCsecond) //进入低功耗模式函数
{
SystemPower_Config();
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);//关闭计数器
RTCWakeUp(_RTCsecond);//自定义唤醒计数器
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//进入低功耗停机模式
}
void SystemPower_Config(void) //进入低功耗时钟配置
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
//使能低功耗模式时钟
__HAL_RCC_PWR_CLK_ENABLE();
//关闭所有IO口时钟
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
__HAL_RCC_GPIOH_CLK_DISABLE();
__HAL_RCC_GPIOE_CLK_DISABLE();
}
3.出低功耗程序编写
void initAfterSleep(void)
{
//各个初始化配置
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_SPI1_Init();
MX_TIM2_Init();
MX_UART4_Init();
MX_RTC_Init();
MX_USART1_UART_Init();
__HAL_UART_ENABLE_IT(&huart4, UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
HAL_TIM_Base_Init(&htim2);
HAL_TIM_Base_Start_IT(&htim2);
//回调函数的初始化非常重要!
HAL_UART_MspInit(&huart1);
HAL_UART_MspInit(&huart2);
HAL_UART_MspInit(&huart4);
HAL_SPI_MspInit(&hspi1);
}
二、主要函数接口
1. HAL库进入低功耗模式函数
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
进入低功耗模式的接口,执行该函数后进入低功耗模式。
2. HAL库唤醒计数器设置函数
RTCWakeUp(RTCsecond);
开发人员可根据需要自定义中断唤醒计数值。
根据已经在STM32CubeMX中配置的Wakeup时钟频率和计数值设置低功耗时间。
3. HAL库RTC唤醒参数配置函数
HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
RTC唤醒的参数进行配置(STM32CubeMX需要进行首次配置)。
对RTC唤醒的时钟和计数值进行配置。
三、注意事项
1. 待机模式唤醒:
1.唤醒形式直接产生中断就能唤醒。
2.唤醒后不会进入中断函数
3.唤醒后程序复位,重新执行
2. 停机模式唤醒:
1.需要对标志位清除,并且时钟要重新配置。
2.唤醒后进入中断函数
3.唤醒后程序从停机的位置继续运行。没有复位,单片机寄存器里的各种变量值仍然保留!
总结
本项目中低功耗唤醒的使用主要可以归纳为:
1.RTC低功耗唤醒参数配置
2.调用void startSleep(uint32_t _RTCsecond)进低功耗模式程序
3.调用void initAfterSleep(void)配置出低功耗模式
提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。
感谢你的阅读,期待你的关注收藏点赞!