RTC初始化的时候调用库函数RTC_SetCounter( )没有问题(初始化代码如下所示)。RTC初始化后,重新设置当前时间,再去调用RTC_SetCounter( )时,就在RTC_WaitForLastTask()中就跳不出来了。
百度了一下有人说如下处理,果然有效,可是不知道原因,还望了解真相的告知一二!
RTC_WaitForLastTask();
RTC_SetCounter(counter); // 设置RTC计数器
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RTC_WaitForLastTask();
初始化代码
RTC_NVIC_Config();
RCC_APB1PeriphClockCmd((RCC_APB1Periph_PWR | RCC_APB1Periph_BKP), ENABLE); // 使能PWR和BKR时钟
PWR_BackupAccessCmd(ENABLE); // 使能BKR访问
BKP_DeInit(); // 复位BKR寄存器内容
RCC_LSEConfig(RCC_LSE_ON); // 使能LSE
while(RESET == RCC_GetFlagStatus(RCC_FLAG_LSERDY)) // 等待LSE稳定
{
delay_ms(10);
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 选择LSE作为RTC模块时钟源
RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟
RTC_WaitForLastTask(); // 等待RTC最近一次寄存器写操作完成
RTC_WaitForSynchro(); // 等待RTC寄存器同步完成
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_SetPrescaler(32767);
RTC_WaitForLastTask();
RTC_SetCounter(0);
|