stm32F030C6使用RTC中断不工作

2019-07-20 23:50发布

RTC初始化程序如下,试了LSE、LSI都没有效果,请行家指导一下。

u8 user_RTC_Init(void)
{
        u8 temp=0;
  //RTC_Init(RTC_InitTypeDef * RTC_InitStruct);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);                //pwr   
        PWR_BackupAccessCmd(ENABLE);                            //enable rtc access
        if (RTC_ReadBackupRegister(RTC_BKP_DR1) != 0x5050)
        {       
                RCC_LSICmd(ENABLE);
          //RCC_LSEConfig(RCC_LSE_ON);                                                        //LSE
          //while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)        //wait for LSE
                while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
                {
                        temp++;
                }
          //if(temp>=250)return 1;                                                                //fail
          //RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);                    //LSE as rtc clk
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
                RCC_RTCCLKCmd(ENABLE);                                    //enable rtc
               
                RTC_WaitForSynchro();                                        //等待RTC寄存器同步  
                RTC_ITConfig(RTC_IT_TS, ENABLE);                    //使能RTC秒中断
                RTC_ITConfig(RTC_IT_ALRA, ENABLE);
                RTC_EnterInitMode();
          //RTC_SetPrescaler(32767);                            //设置RTC预分频的值
                RTC_Set(2009,12,2,10,0,55);                         //设置时间       
                RTC_ExitInitMode();                                 //退出配置模式  
        }
        else                                                    //系统继续计时
        {

                RTC_WaitForSynchro();                                    //等待最近一次对RTC寄存器的写操作完成
                RTC_ITConfig(RTC_IT_TS, ENABLE);                    //使能RTC秒中断
        }
        RTC_NVIC_Config();                                      //RCT中断分组设置                                                         
        RTC_Get();                                              //更新时间       
        return 0;                                               //ok

}                                                     

中断程序如下
void RTC_IRQHandler(void)
{
    u8 res;
    if (RTC_GetITStatus(RTC_IT_TS) != RESET)
        {                                                       
                RTC_Get();
        }
        if(RTC_GetITStatus(RTC_IT_ALRA)!= RESET)
        {
                RTC_ClearITPendingBit(RTC_IT_ALRA);            
          }                                                                                                    
        RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_ALRA);
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-21 05:50
帮顶
翼行园子
2楼-- · 2019-07-21 08:02
  if (RTC_ReadBackupRegister(RTC_BKP_DR1) != 0x5050)  这句改成  if (RTC_ReadBackupRegister(RTC_BKP_DR1) != 0x5051)  试下
翼行园子
3楼-- · 2019-07-21 12:09
这个判断 如果还是之前的5050  是不会进行if语句里边的初始化的   还有建议你把内部时钟的使能 拉到这个if语句前面 这样每次重启的时候 才会开启内部时钟
www0903
4楼-- · 2019-07-21 14:14
 精彩回答 2  元偷偷看……

一周热门 更多>