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

出现的现象是上电初始化时配置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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值