void RTC_Config(void)
{
//我们在BKP的后备寄存器1中,存了一个特殊字符0xA5A5
//第一次上电或后备电源掉电后,该寄存器数据丢失,
//表明RTC数据丢失,需要重新配置
if (BKP_ReadBackupRegister(BKP_DR1) != 0x0505)
{
//重新配置RTC
RTC_Configuration();
RTC_Set(2011,2,30,13,41,25);
// Time_Set(23,59,59);
//配置完成后,向后备寄存器中写特殊字符0xA5A5
BKP_WriteBackupRegister(BKP_DR1, 0x0505);
}
else
{
//若后备寄存器没有掉电,则无需重新配置RTC
//这里我们可以利用RCC_GetFlagStatus()函数查看本次复位类型
if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
{
//这是上电复位
}
else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)
{
//这是外部RST管脚复位
}
//清除RCC中复位标志
RCC_ClearFlag();
//虽然RTC模块不需要重新配置,且掉电后依靠后备电池依然运行
//但是每次上电后,还是要使能RTCCLK???????
RCC_RTCCLKCmd(ENABLE);
//等待RTC时钟与APB1时钟同步
RTC_WaitForSynchro();
//使能秒中断
RTC_ITConfig(RTC_IT_SEC, ENABLE);
//等待操作完成
RTC_WaitForLastTask();
}
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
#ifdef RTCClockOutput_Enable
/* Disable the Tamper Pin */
BKP_TamperPinCmd(DISABLE);
/* Enable RTC Clock Output on Tamper Pin */
BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);
#endif
}
这是我从网上下载的代码,功能也实现了,但是还是有一个疑惑,我感觉在上电复位以后对rtc配置一次就够了,然后设置时间,在RTC_Set(2011,2,30,13,41,25);函数以后,我感觉就都不需要了。不知道这样理解对不对?
------解决方案--------------------
------解决方案--------------------
这是我从网上下载的代码,功能也实现了,但是还是有一个疑惑,我感觉在上电复位以后对rtc配置一次就够了,然后设置时间,在RTC_Set(2011,2,30,13,41,25);函数以后,我感觉就都不需要了。不知道这样理解对不对?
要看有没有完全掉电。。。
掉电后,数据会丢
如果确定不掉,理论上,那当然是设置一次就可以了
:)