Void RTC_Configuration(void)//
实时时钟的初始化配置
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR
|
RCC_APB1Periph_BKP,ENABLE);
//
使能
APB1
外设
PWR
(电源控制寄存器)
BKP
(备份寄存器)时钟。
PWR_BackupAccessCmd(ENABLE);
//
允许访问
BKP
域
BKP_DeInit();
//
复位备份域。
#ifdef
RTCClockSource_LSI
RCC_LSICmd(ENABLE);
//
使能内部低速晶振。
While(RCC_GetFlagStatus(RCC_Flag_LSIRDY)==RESET)//
等待
LSI
准备好
{
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//
选择
LSI
为
RTC
时钟
#elif
define
RTCClockSource_LSI
RCC_LSEConfig(RCC_LSE_ON);
//LSE
晶振
ON
While(RCC_GetFlagStatus(RCC_Flag_LSERAY)==RESET)//
等待
LSE
准备好
{
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//
选择
LSE
为
RTC
时钟
#endif
RCC_RTCCLKCmd(ENABLE);
//
使能
RTC
时钟
#ifdef
RTC_ClockOutput_ENABLE
//
禁止
Tamper
引脚
BKP_TamperPinCmd(DISABLE);//
为了将
RTCCLK/64
在
Tamper
引脚上输出,
Tamper
功能必
须被禁止
BKP_RTCCalibrationClockOutputCmd(ENABLE);//
允许
RTC
时钟在
Tamper
上输出
#endif
RTC_WaitForSynchro();//
等待寄存器同步
RTC_WaitForLastTask();//
等待上次寄存器写操作完成
RTC_ITConfig(RTC_IT_SEC,ENABLE);//
允许
RTC
秒中断
RTC_WaitForLastTask();//
等待上次寄存器写操作完成
#ifdef RTC_ClockSource_LSI//
设置分频系数
RTC_SetPrescalor(31999);//RTC
周期
=RTCCLK/RTC_PR=(32.000KHz/(31999+1))
#elif define RTC_ClockSource_LSE
RTC_SetPrescaler(32767);// RTC
周期
=RTCCLK/RTC_PR=(32.768KHz/(32767+1))
#endif
RTC_WaitForLastTask();//
等待最近一次对
RTC
寄存器的写操作的完成。
}
RTC_Configuration,布布扣,bubuko.com
原文:http://www.cnblogs.com/liufang/p/3728764.html