/*********************************************************************
?* @fn? ? ? RTC_Init
?*
?* @brief? ?Initializes RTC collection.
?*
?* @return? 1 - Init Fail
?*? ? ? ? ? 0 - Init Success
?*/
u8 RTC_Init(void)
{
? ? u8 temp = 0;
? ? u16 temp_16=0;
? ? /*開啟時鐘*/
? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);? ? ?//開啟PWR的時鐘
? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);? ? ?//開啟BKP的時鐘
? ? /*備份寄存器訪問使能*/
? ? PWR_BackupAccessCmd(ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? //使用PWR開啟對備份寄存器的訪問
? ? temp_16=BKP_ReadBackupRegister(BKP_DR1);
? ? if (temp_16 != 0xA5A5)? ? ? ? ? //通過寫入備份寄存器的標志位,判斷RTC是否是第一次配置 //if成立則執(zhí)行第一次的RTC配置
? ? {
? ? ? ? RCC_LSEConfig(RCC_LSE_ON);? ? ? ? ? ? ? ? ? ? ? ? ? //開啟LSE時鐘
? ? ? ? while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)
? ? ? ? {
? ? ? ? ? ? ? ? temp++;
? ? ? ? ? ? ? ? Delay_Ms(20);
? ? ? ? }
? ? ? ? if(temp >= 250)
? ? ? ? return 1;
? ? ? ? RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);? ? ? ? ? ? ?//選擇RTCCLK來源為LSE
? ? ? ? RCC_RTCCLKCmd(ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //RTCCLK使能
? ? ? ? RTC_WaitForSynchro();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//等待同步
? ? ? ? RTC_WaitForLastTask();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等待上一次操作完成
? ? ? ? RTC_SetPrescaler(32768 - 1);? ? ? ? ? ? ? ? ? ? ? ? //設置RTC預分頻器,預分頻后的計數(shù)頻率為1Hz
? ? ? ? RTC_WaitForLastTask();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等待上一次操作完成
? ? ? ? //RTC_SetCounter(100);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //將秒計數(shù)器寫入到RTC的CNT中
? ? ? ? RTC_WaitForLastTask();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等待上一次操作完成
? ? ? ? BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);? ? ? ? ? ?//在備份寄存器寫入自己規(guī)定的標志位,用于判斷RTC是不是第一次執(zhí)行配置
? ? }
? ? else? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //RTC不是第一次配置
? ? {
? ? ? ? RTC_WaitForSynchro();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//等待同步
? ? ? ? RTC_WaitForLastTask();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等待上一次操作完成
? ? }
? ? RTC_ITConfig(RTC_IT_SEC, DISABLE);
? ? RTC_ITConfig(RTC_IT_OW, DISABLE);
? ? RTC_NVIC_Config();
? ? RTC17_Config_Standly();
? ? RTC_Get();
? ? return 0;
}
這是我初始化時鐘的程序,在程序調試的時候,發(fā)現(xiàn)復位正常,但是在調試階段,發(fā)現(xiàn)RTC_WaitForSynchro(); 函數(shù)一直過不去,不知道是什么情況