[STM32L0] STM32L0休眠RTC唤醒LL库

[复制链接]
 楼主| guanjiaer 发表于 2025-7-10 11:21 | 显示全部楼层 |阅读模式
CUBE配置

86339686c8ed1028c6.png

中断配置

81190686c8ed698c5c.png

中断优先级

13716686c8ede7d7de.png

配置LL库

76299686c8ee764813.png

增加代码

void stop(void)
{
        //启PWR时钟
        LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
        //设置中断
        LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);
        LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_20);
        LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_20);

        /* 设置RTC唤醒时间 */
        LL_RTC_DisableWriteProtection(RTC);
        LL_RTC_WAKEUP_Disable(RTC);
        while(!LL_RTC_IsActiveFlag_WUTW(RTC));
        LL_RTC_WAKEUP_SetAutoReload(RTC, 10);
        LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);
        LL_RTC_EnableIT_WUT(RTC);
        LL_RTC_WAKEUP_Enable(RTC);
        LL_RTC_EnableWriteProtection(RTC);

        LL_PWR_EnableUltraLowPower();
        LL_PWR_SetRegulModeLP(LL_PWR_REGU_LPMODES_MAIN);
        LL_PWR_SetPowerMode(LL_PWR_MODE_STOP);
        LL_LPM_EnableDeepSleep();
        __WFI();
}



在中断里,增加时钟配置,同时清除标志

void RTC_IRQHandler(void)
{
  /* USER CODE BEGIN RTC_IRQn 0 */
        while(LL_RTC_IsActiveFlag_WUT(RTC))
        {
                LL_RTC_ClearFlag_WUT(RTC);
                LL_RCC_MSI_Enable();
                LL_RCC_LSI_Enable();
        }
        LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);
  /* USER CODE END RTC_IRQn 0 */

  /* USER CODE BEGIN RTC_IRQn 1 */

  /* USER CODE END RTC_IRQn 1 */
}


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/g313105910/article/details/148425492

小小蚂蚁举千斤 发表于 2025-7-28 22:55 | 显示全部楼层
STM32L0休眠RTC唤醒LL库
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

4344

帖子

2

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