RCT的例程中只有设置RTC时间,没有后续使用的过程
u8 RTC_Init(void)
{
u8 temp = 0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
/* Is it the first configuration */
BKP_DeInit();
RCC_LSEConfig(RCC_LSE_ON);
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)
{
temp++;
Delay_Ms(20);
}
if(temp >= 250)
return 1;
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForLastTask();
RTC_WaitForSynchro();
// RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_EnterConfigMode();
RTC_SetPrescaler(32767);
RTC_WaitForLastTask();
RTC_Set(2019, 10, 8, 13, 58, 55); /* Setup Time */
RTC_ExitConfigMode();
BKP_WriteBackupRegister(BKP_DR1, 0XA1A1);
RTC_NVIC_Config();
RTC_Get();
return 0;
}
上述是配置RTC源代码,在配置中可以看到,RTC将BKP给DeInit了,在配置SEC秒中断后开始设置时间,时间定在了2019年10月8日,13点58分55秒,在后续若需要设置时间可以使用该函数,但是需要进入配置模式,从24行开始到30行。
使用该代码,每次开机都是这个时间开始,因此我们要使用的时候按以下代码修改
u8 RTC_Init(void)
{
u8 temp = 0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
/* Is it the first configuration */
// BKP_DeInit();
RCC_LSEConfig(RCC_LSE_ON);
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)
{
temp++;
Delay_Ms(20);
}
if(temp >= 250)
return 1;
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForLastTask();
RTC_WaitForSynchro();
// RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_ITConfig(RTC_IT_SEC, ENABLE);
// RTC_WaitForLastTask();
// RTC_EnterConfigMode();
//RTC_SetPrescaler(32767);
//RTC_WaitForLastTask();
// RTC_Set(2019, 10, 8, 13, 58, 55); /* Setup Time */
// RTC_ExitConfigMode();
//BKP_WriteBackupRegister(BKP_DR1, 0XA1A1);
RTC_NVIC_Config();
RTC_Get();
return 0;
}
将BKP的DeInit和进入配置模式取消即可正常获取RTC计数的值了。
更多回帖