STM32 RTC更新时间计数器RTC_CNT后在函数RTC_WaitForLastTask()中死循环的原因

来源:互联网 发布:html怎么外链js 编辑:程序博客网 时间:2024/04/27 18:38
出现的现象是上电初始化时配置RTC没有错误,程序顺利通过,但是在程序运行过程中校正时间,更新RTC_CNTx的值,程序就会停在RTC_WaitForLastTask()进行死循环。


问题的原因就在于,每次操作RTC_CNTx时应该要使能PWR 和 BKP 时钟,允许访问BKP域。


例程中只在第一次上电,并且初始化RTC后才执行了写RTC_CNTx的操作,如下:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf("\r\n\n RTC not yet configured....");
/* RTC Configuration */
RTC_Configuration();
printf("\r\n RTC configured....");


/* Adjust time by values entered by the user on the hyperterminal */
Time_Adjust();
而在校正时间,更新RTC_CNTx时不能直接调用Time_Adjust()函数,需要开启PWR 和 BKP 时钟,且允许访问BKP域


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);


/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* 修改当前RTC计数寄存器内容 */
RTC_SetCounter(Cnt);
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();

0 0
原创粉丝点击