OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4472|回复: 2

RTC设置进不了秒中断,时间不更新,断电后重新上电发现时间有更新,这是怎么回事呢?

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-11-27
在线时间
9 小时
发表于 2020-2-28 21:54:24 | 显示全部楼层 |阅读模式
1金钱
这是我的源码
u8 My_RTC_Init(void)
{
        RTC_InitTypeDef RTC_InitStructure;
        u16 retry=0X1FFF;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//ê1ÄüPWRê±Öó
        PWR_BackupAccessCmd(ENABLE);        //ê1Äüo󱸼Ä′æÆ÷·ÃÎê
       
        if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5052)                //êÇ·ñμúò»′ÎÅäÖÃ?
        {
                RCC_LSEConfig(RCC_LSE_ON);//LSE ¿aÆô   
                while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)        //¼ì2éÖ¸¶¨μÄRCC±ê־λéèÖÃóë·ñ,μè′yμíËù¾§Õñ¾íD÷
                        {
                        retry++;
                        delay_ms(10);
                        }
                if(retry==0)return 1;                //LSE ¿aÆôê§°ü.
                       
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);                //éèÖÃRTCê±Öó(RTCCLK),Ñ¡ÔñLSE×÷ÎaRTCê±Öó   
                RCC_RTCCLKCmd(ENABLE);        //ê1ÄüRTCê±Öó

    RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTCòì2½·ÖÆμÏμêy(1~0X7F)
    RTC_InitStructure.RTC_SynchPrediv  = 0xFF;//RTCí¬2½·ÖÆμÏμêy(0~7FFF)
    RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//RTCéèÖÃÎa,24D¡ê±¸ñê½
    RTC_Init(&RTC_InitStructure);

                RTC_Set_Time(19,16,12,RTC_H12_AM);        //éèÖÃê±¼ä
                RTC_Set_Date(20,2,28,5);                //éèÖÃèÕÆú
         
                RTC_WriteBackupRegister(RTC_BKP_DR0,0x5052);        //±ê¼ÇòѾ-3õê¼»ˉ1yáË
                       
        }
        return 0;
}

void RTC_Set_WakeUp(u32 wksel,u16 cnt)
{
        EXTI_InitTypeDef   EXTI_InitStructure;
       
        RTC_WakeUpCmd(DISABLE);//1رÕWAKE UP
       
        RTC_WakeUpClockConfig(wksel);//»½DÑê±ÖóÑ¡Ôñ
       
        RTC_SetWakeUpCounter(cnt);//éèÖÃWAKE UP×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷
       
        RTC_ClearFlag(RTC_FLAG_WUTF);        //Çå3yÖD¶Ï±êÖ¾
        RTC_ClearITPendingBit(RTC_IT_WUT); //Çå3yRTC WAKE UPμıêÖ¾
  EXTI_ClearITPendingBit(EXTI_Line22);//Çå3yLINE22éÏμÄÖD¶Ï±ê־λ
         
        RTC_ITConfig(RTC_IT_WUT,ENABLE);//¿aÆôWAKE UP ¶¨ê±Æ÷ÖD¶Ï
        RTC_WakeUpCmd( ENABLE);//¿aÆôWAKE UP ¶¨ê±Æ÷¡¡
       
        EXTI_InitStructure.EXTI_Line = EXTI_Line22;//LINE22
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//ÖD¶Ïê¼t
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //éÏéyÑØ′¥·¢
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;//ê1ÄüLINE22
  EXTI_Init(&EXTI_InitStructure);//ÅäÖÃ


        NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//ÇàÕ¼óÅÏè¼¶1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//×óóÅÏè¼¶2
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ê1Äüía2¿ÖD¶Ïí¨μà
  NVIC_Init(&NVIC_InitStructure);//ÅäÖÃ
}


void RTC_WKUP_IRQHandler(void)
{   
        if(RTC_GetFlagStatus(RTC_FLAG_WUTF)==SET)//WK_UPÖD¶Ï?
        {
                RTC_ClearFlag(RTC_FLAG_WUTF);        //Çå3yÖD¶Ï±êÖ¾
               
                LED1=!LED1;
        }   
        EXTI_ClearITPendingBit(EXTI_Line22);//Çå3yÖD¶ÏÏß22μÄÖD¶Ï±êÖ¾
        RTC_ClearITPendingBit(RTC_IT_WUT); //Çå3yRTC WAKE UPμıêÖ¾                                                               
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-2-29 18:35:52 | 显示全部楼层
参考原子RTC代码看下能找到原因不
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2020-9-4
在线时间
1 小时
发表于 2021-8-12 00:01:30 来自手机 | 显示全部楼层
楼主解决问题了吗?我也出现了这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 03:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表