【待更新】解决RTC_WaitForSynchro()死循环

在使用低速内部时钟LSI(LSI为32内部RC时钟,频率40KHz),以及BKP存储掉电信息时,会一直卡在该函数上RTC_WaitForSynchro();

分析

stm32f10x_rtc.c源码分析

/**
  * @brief  Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL)
  *   are synchronized with RTC APB clock.
  * @note   This function must be called before any read operation after an APB reset
  *   or an APB clock stop.
  * 简介:等待直到RTC寄存器(RTC_CNT,RTC_ALR和RTC_PRL)与RTC APB时钟同步。
    注意:必须在APB复位或APB时钟停止后进行任何读取操作之前调用此函数。
  * @param  None
  * @retval None
  */
void RTC_WaitForSynchro(void)
{
  /* Clear RSF flag */
  RTC->CRL &= (uint16_t)~RTC_FLAG_RSF;
  /* Loop until RSF flag is set */
  /*循环直到置位了RSF标志*/
  while ((RTC->CRL & RTC_FLAG_RSF) == (uint16_t)RESET)
  {
  }
}

所以需要检查RTC的RSF位置,如下图

仿真-RSF未置位

在这里插入图片描述

解决方法

我的解决方法是在读取BKP寄存器前添加,RCC_RTCCLKCmd(ENABLE);函数

在这里插入图片描述

仿真-修改后的

在这里插入图片描述
没有测试使用外部LSE时钟(32.768K)的情况,请遇到相同的问题CSDN好友,帮忙解决,补充下^_^
有空的话我也跟着做

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值