随笔 - 733  文章 - 2  评论 - 12  阅读 - 92万

STM32 RTC上的唤醒和闹钟

RTC很简单只要给备用电,RTC就会不停,可以进行设置和读时间。同时在RTC上也涉及了闹钟(EXTI_17:RTC_FLAG_ALRAF,相当于RTC的定时器,闹钟到了之后进行异步操作)和唤醒中断(低功耗模式下的操作EXTI_22:RTC_IT_WUT)。

如果PA0上有开关信号唤醒EXIT_Line0,同时也有RTC的唤醒中断EXTI_22需要清除2个中断标记RTC_IT_WUT和EXTI_Line20。

void RTC_WKUP_IRQHandler(void)
{  

  if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
  {
    RTC_ClearITPendingBit(RTC_IT_WUT);
  }
  EXTI_ClearITPendingBit(EXTI_Line20);

}

void EXTI0_IRQHandler(void) //中断0 唤醒 ;
{
  EXTI_ClearITPendingBit(EXTI_Line0);
}

https://blog.csdn.net/licent9420/article/details/79828381

int main()

{

    DelayInit();    //延时初始化

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR时钟

    if(PWR_GetFlagStatus(PWR_FLAG_SB))  //从待机模式唤醒,清除相应标志位 

    {

        PWR_ClearFlag(PWR_FLAG_SB);

        PWR_ClearFlag(PWR_FLAG_WU);

    }

    OLED_Init();

    RtcInit(); 

    while(1)    {

        OLED_8x16StrP(0,0,"Runing...");         //液晶提示在运行中

        DelayS(2);                              //延时2秒

        RtcWakeUpConfig();                      //RTC wakeup 配置:间隔500ms自动唤醒

//      PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);  //Periodic auto-wakeup不需要外部唤醒管脚,故不需要这句,唤醒可以通过RTC或外部唤醒引脚PA0唤醒。因此唤醒时要区别是何种方式唤醒。

        PWR_EnterSTANDBYMode();   //进入待机(STANDBY)模式     

    }

}

posted on   杰瑞鼠  阅读(7209)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示