【STM32】HAL库开发教程(六)—低功耗唤醒

前言

不必害怕未知,无需恐惧犯错,做一个Creator!

本文主要介绍STM32_HAL库开发中低功耗唤醒的使用。

一、开发步骤

1.STM32CubeMX配置

  1. 在左侧引脚配置处勾选RTC进行配置
  2. 在RTC模式处勾选“Wakeup”唤醒使能RTC唤醒模式
  3. 在RTC参数配置处进行参数配置:RTC时钟、Wakeup唤醒时钟、Wakeup唤醒计数器以及勾选”NVIC Settings”使能外部中断

【STM32】HAL库开发教程(六)—低功耗唤醒_第1张图片

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)配置出低功耗模式


提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。

感谢你的阅读,期待你的关注收藏点赞!

你可能感兴趣的:(stm32,keil,mdk,rtc,嵌入式)