打印
[应用相关]

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

[复制链接]
1377|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本文主要介绍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.进低功耗程序编写

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();
}

使用特权

评论回复
地板
梅花香自123|  楼主 | 2021-9-28 21:44 | 只看该作者
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);       
}

使用特权

评论回复
5
梅花香自123|  楼主 | 2021-9-28 21:44 | 只看该作者
二、主要函数接口
1. HAL库进入低功耗模式函数
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
进入低功耗模式的接口,执行该函数后进入低功耗模式。

使用特权

评论回复
6
梅花香自123|  楼主 | 2021-9-28 21:45 | 只看该作者
2. HAL库唤醒计数器设置函数
RTCWakeUp(RTCsecond);
开发人员可根据需要自定义中断唤醒计数值。
根据已经在STM32CubeMX中配置的Wakeup时钟频率和计数值设置低功耗时间。

使用特权

评论回复
7
梅花香自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唤醒的时钟和计数值进行配置。

使用特权

评论回复
8
梅花香自123|  楼主 | 2021-9-28 21:47 | 只看该作者
三、注意事项
1. 待机模式唤醒:
1.唤醒形式直接产生中断就能唤醒。
2.唤醒后不会进入中断函数
3.唤醒后程序复位,重新执行

使用特权

评论回复
9
梅花香自123|  楼主 | 2021-9-28 21:48 | 只看该作者
2. 停机模式唤醒:
1.需要对标志位清除,并且时钟要重新配置。
2.唤醒后进入中断函数
3.唤醒后程序从停机的位置继续运行。没有复位,单片机寄存器里的各种变量值仍然保留!

使用特权

评论回复
10
梅花香自123|  楼主 | 2021-9-28 21:48 | 只看该作者
总结
本项目中低功耗唤醒的使用主要可以归纳为:
1.RTC低功耗唤醒参数配置
2.调用void startSleep(uint32_t _RTCsecond)进低功耗模式程序
3.调用void initAfterSleep(void)配置出低功耗模式

使用特权

评论回复
11
keaibukelian| | 2021-10-12 15:21 | 只看该作者
每种低功耗的唤醒方式都不相同吧

使用特权

评论回复
12
labasi| | 2021-10-12 15:26 | 只看该作者
都有哪些种类的低功耗啊

使用特权

评论回复
13
paotangsan| | 2021-10-12 15:28 | 只看该作者
如何注意在低功耗的时候程序跑飞呢

使用特权

评论回复
14
renzheshengui| | 2021-10-12 15:30 | 只看该作者
有没有必要开启看门狗呀

使用特权

评论回复
15
wakayi| | 2021-10-12 15:31 | 只看该作者
用cube配置基本啥都不用操心了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

1108

帖子

0

粉丝