在使用低速内部时钟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好友,帮忙解决,补充下^_^
有空的话我也跟着做