//RTC配置
void RTC_Config(void)
{
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE); //使能PWR和BKP外设时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问
/* Reset Backup Domain */
// 禁用入侵检测引脚
BKP_TamperPinCmd(DISABLE);
BKP_RTCOutputConfig(BKP_RTCOutputSource_Second); //使能入侵检测管脚输出RTC秒脉冲
BKP_DeInit(); //复位备份区域
//使用外部高速晶振 128分频
//RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
//使用外部32768晶振
RCC_LSEConfig(RCC_LSE_ON); //设置外部低速晶振(LSE),使用外设低速晶振
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); //检查指定的RCC标志位设置与否,等待低速晶振就绪
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟
/* Enable RTC Clock */
RCC_RTCCLKCmd(ENABLE); //使能RTC时钟
/* Wait for RTC registers synchronization */
RTC_WaitForSynchro(); //等待RTC寄存器同步
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
/* Set RTC prescaler: set RTC period to 1sec */
/* RTC period = RTCCLK/RTC_PR = (8000000Hz)/128/(62499+1) */
//RTC_SetPrescaler(62499);
// RTC_EnterConfigMode();///允许配置
RTC_SetPrescaler(32767); //设置RTC预分频的值
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
}
|
版权声明:本文为CSDN博主「何时杖而看南雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_41861711/article/details/119008717