這是一個完整的初始化函數
void rtc_init(void)//RTC初始化設定
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//打開電源時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);//打開存儲器時鐘
PWR_BackupAccessCmd(ENABLE); //使能RTC后備寄存器訪問
BKP_DeInit(); //BKP外設全部寄存器設定為默認值
RCC_LSEConfig(RCC_LSE_ON); //開啟32.768外部時鐘
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET); //等待時鐘振蕩
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //選定RTC時鐘,選定后不能更改,除非復位
RCC_RTCCLKCmd(ENABLE); //使能RTC
RTC_WaitForSynchro(); //等待RTC的ABP時鐘同步
RTC_WaitForLastTask(); //等待最近一次對RTC寫操作的完成
RTC_ITConfig(RTC_IT_SEC,ENABLE); //使能RTC中斷
RTC_WaitForLastTask(); //等待最近一次對RTC寫操作的完成
RTC_SetPrescaler(32768-1); //RTC分頻設定
RTC_WaitForLastTask(); //等待最近一次對RTC寫操作的完成
RTC_NVIC_Config(); //RTC中斷設定
RTC_WaitForLastTask(); //等待最近一次對RTC寫操作的完成
Set_RTC_Val(0);
BKP_WriteBackupRegister(BKP_DR1,0xa5a5); //已經初始化過RTC,可以寫入
} |