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

寄存器的写操作的完成。

 

}

转载于:https://www.cnblogs.com/liufang/p/3728764.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值