这是一个完整的初始化函数
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,可以写入
} |