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);
}
|