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

出现的现象是上电初始化时配置RTC没有错误,程序顺利通过,但是在程序运行过程中校正时间,更新RTC_CNTx的值,程序就会停在RTC_WaitForLastTask()进行死循环。

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

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

1
2
3
4
5
6
7
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域

1
2
3
4
5
6
7
8
9
10
11
/* 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();

其实如果能仔细看看手册应该不会出现这样的错误。不过幸亏有网络,有前人的经验,我没有话太多时间。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/stm32-rtc%e6%9b%b4%e6%96%b0%e6%97%b6%e9%97%b4%e8%ae%a1%e6%95%b0%e5%99%a8rtc_cnt%e5%90%8e%e5%9c%a8%e5%87%bd%e6%95%b0rtc_waitforlasttask%e4%b8%ad%e6%ad%bb%e5%be%aa%e7%8e%af%e7%9a%84%e5%8e%9f%e5%9b%a0/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名