关于STM32战舰开发板待机模式RTC闹钟唤醒的一点总结(提供RTC待机自动唤醒源码)

2019-07-21 03:17发布

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
48条回答
Daisy
1楼-- · 2019-07-21 23:09
回复【7楼】22008wjz:
---------------------------------
我后来想了一下,最后验证WKUP上升沿唤醒与RTC闹钟唤醒同时使用的时候确实不需要管EWUP位,也就是说,RTC闹钟唤醒与这一位是1是0无关,只要有闹钟中断,就应该能唤醒待机模式,关于唤醒标志位的清除问题,我是这样想的,手动清除是必须的,无论用RTC唤醒还是WKUP键唤醒,但是我是把这一位放在进入待机模式之前做的,也就是说清除了唤醒标志位后马上进待机模式,不知道是不是因为你这一位放在中断中清除影响RTC唤醒,我把我的源码发给你,你看一下吧,有问题我们再交流。
jermy_z
2楼-- · 2019-07-22 02:27
总结的不错
正点原子
3楼-- · 2019-07-22 03:03
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-22 07:21
有感于楼主的行为,特地花了点时间,写了个demo,见楼主位附件。
Demo工程的效果:
程序启动后,读取RTC计数器值,然后设置闹钟在8秒钟后唤醒,然后程序运行5秒钟,进入待机模式,待机3秒,程序通过RTC闹钟唤醒,完成一个循环。
22008wjz
5楼-- · 2019-07-22 13:06
把函数改成下面这个样子,好像就可以了,也不明白为什么
void RTC_IRQHandler(void)
{  
        if (RTC_GetITStatus(RTC_IT_SEC) != RESET)//秒钟中断
        {
            static int i=0;
            //LED0=0; //亮灯DS0
            RTC_ClearITPendingBit(RTC_IT_SEC); 
            RTC_Get();//更新时间   

            i++;
            if(i==20)
            {
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟   
                WR_BackupAccessCmd(ENABLE); //使能后备寄存器访问 
                RTC_WaitForLastTask();
                RTC_EnterConfigMode();
                RTC_SetAlarm(RTC_GetCounter()+8);
                RTC_ExitConfigMode();
                RTC_WaitForLastTask();
                RTC_ITConfig(RTC_IT_ALR, ENABLE);
                RTC_WaitForLastTask();
                Sys_Enter_Standby(); 
                i=0;
             }
        }
        if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)//闹钟中断
        {
            RTC_ClearITPendingBit(RTC_IT_ALR); //清闹钟中断
            WR->CR|=1<<2;
            LCD_ShowString(30,30,200,16,16,"Warship enter alrINT!");       
       }      
RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW); //清闹钟中断
RTC_WaitForLastTask();                
}
多谢楼主和原子哥的热情帮助啊
trAvka
6楼-- · 2019-07-22 14:28
谢谢分享!

一周热门 更多>