| void rtc_init() {
 NVIC_InitTypeDef NVIC_InitStructure; //中断结构体定义
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//打开电源时钟
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);//打开存储器时钟
 PWR_BackupAccessCmd(ENABLE);//使能或者失能 RTC 和后备寄存器访问
 BKP_DeInit();//将外设 BKP 的全部寄存器重设为缺省值
 RCC_LSEConfig(RCC_LSE_ON);//设置外部低速晶振(LSE)
 while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//检查指定的 RCC 标志位设置
 与否
 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//设置 RTC 时钟(RTCCLK)
 RCC_RTCCLKCmd(ENABLE);//使能或者失能 RTC 时钟
 RTC_WaitForSynchro(); //等待 RTC 寄存器同步
 RTC_WaitForLastTask();//等待最近一次对 RTC 寄存器的写操作完成
 RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能或者失能指定的 RTC 中断
 RTC_WaitForLastTask();//等待最近一次对 RTC 寄存器的写操作完成
 RTC_SetPrescaler(32767);//设置预分频 使用外部晶振为 32.768K,要想 1s 中断则预
 分频数设置为 32767,系统会在此数字基础上加 1
 RTC_WaitForLastTask();//等待最近一次对 RTC 寄存器的写操作完成
 /* 设置 NVIC 参数 */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; //打开 RTC 的全局中断
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为 0
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //响应优先级为 1
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
 NVIC_Init(&NVIC_InitStructure);
 }
 |