帖子如题所示
其实代码在下面
我每次复位之后技术都从2000开始- void InitRTCCongig(void)
- {
- if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)
- {
- InitRTCCLKConfig();
- BKP_WriteBackupRegister(BKP_DR1,0xA5A5);
- }else
- {
- if(RCC_GetFlagStatus(RCC_FLAG_PORRST)!=RESET)
- {
- //这是上电复位
- }else if(RCC_GetFlagStatus(RCC_FLAG_PINRST)!=RESET)
- {
- //这是按键复位
- }
- RCC_ClearFlag();
- RTC_WaitForLastTask();
-
- //RCC_RTCCLKCmd(ENABLE);
- RTC_WaitForSynchro();
- RTC_WaitForLastTask();
-
- RTC_ITConfig(RTC_IT_SEC,ENABLE);
- RTC_WaitForLastTask();
- }
- #ifndef RTCClockOutput_Enbale
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
- PWR_BackupAccessCmd(ENABLE);
- BKP_TamperPinCmd(DISABLE);
- BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);
- #endif
-
- InitRTCNVICConfig();
- }
下面是InitRTCCLKConfig()的代码- static void InitRTCCLKConfig(void)
- {
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
- PWR_BackupAccessCmd(ENABLE);
- BKP_DeInit();
- RCC_LSEConfig(RCC_LSE_ON);
- while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
- RCC_RTCCLKCmd(ENABLE);
- RTC_WaitForSynchro();
- RTC_WaitForLastTask();
- RTC_SetCounter(2000);
- RTC_WaitForLastTask();
- RTC_ITConfig(RTC_IT_SEC,ENABLE);
- RTC_WaitForLastTask();
- RTC_SetPrescaler(32767);
- RTC_WaitForLastTask();
- PWR_BackupAccessCmd(DISABLE);
- }
|