[应用相关] HAL库开发教程(六)—低功耗唤醒

[复制链接]
1622|14
 楼主| 梅花香自123 发表于 2021-9-28 21:42 | 显示全部楼层 |阅读模式
本文主要介绍STM32_HAL库开发中低功耗唤醒的使用。

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

 楼主| 梅花香自123 发表于 2021-9-28 21:42 | 显示全部楼层
 楼主| 梅花香自123 发表于 2021-9-28 21:43 | 显示全部楼层
2.进低功耗程序编写

  1. void startSleep(uint32_t _RTCsecond) //进入低功耗模式函数
  2. {
  3.         SystemPower_Config();       
  4.         HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);//关闭计数器
  5.         RTCWakeUp(_RTCsecond);//自定义唤醒计数器
  6.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//进入低功耗停机模式
  7. }
  8. void SystemPower_Config(void) //进入低功耗时钟配置
  9. {
  10.           GPIO_InitTypeDef GPIO_InitStructure = {0};
  11.      //使能低功耗模式时钟
  12.           __HAL_RCC_PWR_CLK_ENABLE();
  13.           //关闭所有IO口时钟
  14.           __HAL_RCC_GPIOA_CLK_DISABLE();
  15.           __HAL_RCC_GPIOB_CLK_DISABLE();
  16.           __HAL_RCC_GPIOC_CLK_DISABLE();
  17.           __HAL_RCC_GPIOD_CLK_DISABLE();
  18.           __HAL_RCC_GPIOH_CLK_DISABLE();
  19.           __HAL_RCC_GPIOE_CLK_DISABLE();
  20. }
 楼主| 梅花香自123 发表于 2021-9-28 21:44 | 显示全部楼层
3.出低功耗程序编写
  1. void initAfterSleep(void)
  2. {
  3.     //各个初始化配置
  4.         HAL_Init();
  5.         SystemClock_Config();
  6.          MX_GPIO_Init();
  7.         MX_USART2_UART_Init();
  8.         MX_SPI1_Init();
  9.         MX_TIM2_Init();
  10.         MX_UART4_Init();
  11.         MX_RTC_Init();
  12.         MX_USART1_UART_Init();
  13.         __HAL_UART_ENABLE_IT(&huart4, UART_IT_RXNE);
  14.         __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
  15.         HAL_TIM_Base_Init(&htim2);
  16.         HAL_TIM_Base_Start_IT(&htim2);
  17.        
  18.         //回调函数的初始化非常重要!
  19.         HAL_UART_MspInit(&huart1);
  20.         HAL_UART_MspInit(&huart2);
  21.         HAL_UART_MspInit(&huart4);
  22.         HAL_SPI_MspInit(&hspi1);       
  23. }
 楼主| 梅花香自123 发表于 2021-9-28 21:44 | 显示全部楼层
二、主要函数接口
1. HAL库进入低功耗模式函数
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
进入低功耗模式的接口,执行该函数后进入低功耗模式。
 楼主| 梅花香自123 发表于 2021-9-28 21:45 | 显示全部楼层
2. HAL库唤醒计数器设置函数
RTCWakeUp(RTCsecond);
开发人员可根据需要自定义中断唤醒计数值。
根据已经在STM32CubeMX中配置的Wakeup时钟频率和计数值设置低功耗时间。
 楼主| 梅花香自123 发表于 2021-9-28 21:46 | 显示全部楼层
3. HAL库RTC唤醒参数配置函数
HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
RTC唤醒的参数进行配置(STM32CubeMX需要进行首次配置)。
对RTC唤醒的时钟和计数值进行配置。
 楼主| 梅花香自123 发表于 2021-9-28 21:47 | 显示全部楼层
三、注意事项
1. 待机模式唤醒:
1.唤醒形式直接产生中断就能唤醒。
2.唤醒后不会进入中断函数
3.唤醒后程序复位,重新执行
 楼主| 梅花香自123 发表于 2021-9-28 21:48 | 显示全部楼层
2. 停机模式唤醒:
1.需要对标志位清除,并且时钟要重新配置。
2.唤醒后进入中断函数
3.唤醒后程序从停机的位置继续运行。没有复位,单片机寄存器里的各种变量值仍然保留!

 楼主| 梅花香自123 发表于 2021-9-28 21:48 | 显示全部楼层
总结
本项目中低功耗唤醒的使用主要可以归纳为:
1.RTC低功耗唤醒参数配置
2.调用void startSleep(uint32_t _RTCsecond)进低功耗模式程序
3.调用void initAfterSleep(void)配置出低功耗模式
keaibukelian 发表于 2021-10-12 15:21 | 显示全部楼层
每种低功耗的唤醒方式都不相同吧
labasi 发表于 2021-10-12 15:26 | 显示全部楼层
都有哪些种类的低功耗啊
paotangsan 发表于 2021-10-12 15:28 | 显示全部楼层
如何注意在低功耗的时候程序跑飞呢
renzheshengui 发表于 2021-10-12 15:30 | 显示全部楼层
有没有必要开启看门狗呀
wakayi 发表于 2021-10-12 15:31 | 显示全部楼层
用cube配置基本啥都不用操心了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1216

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部