RTC_Configuration

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

寄存器的写操作的完成。

 

}

posted @ 2014-05-14 21:52  stm32学习中  阅读(1314)  评论(0编辑  收藏  举报