帖子如题所示
其实代码在下面
我每次复位之后技术都从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);
}
|