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();
问题的原因就在于,每次操作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
- STM32 RTC更新时间计数器RTC_CNT后在函数RTC_WaitForLastTask()中死循环的原因
- STM32 RTC卡死在RTC_WaitForLastTask()解决方法
- 关于STM32使用RTC时复位后程序死在 RTC
- 在stm32中使用while循环导致程序卡死
- stm32的定时/计数器TIM(持续更新中)
- stm32 RTC时间
- 关于STM32中RTC的校准方法
- 关于STM32中RTC的校准方法
- 关于STM32中RTC的校准方法
- stm32 RTC_WaitForSynchro()死循环
- STM32的RTC
- stm32的RTC
- stm32的RTC闹钟
- STM32 定时器计数器 更新事件
- stm32在rt-thread上的RTC(实时时钟)
- RTC何时更新系统时间
- 在TURBO C中什么是“死循环”?
- Scanner在异常处理中死循环
- 某公司面试题
- 匈牙利命名表
- 局部敏感哈希-Locality Sensitive Hashing
- 仿QQ主界面Fragment简单应用
- PA-项目转资基础篇
- STM32 RTC更新时间计数器RTC_CNT后在函数RTC_WaitForLastTask()中死循环的原因
- STM32-串口超时判断方式接收未知长度数据
- jQuery全选选择器(基本上来自慕课网)
- LeetCode Range Sum Query - Mutable
- windows消息机制
- bind 9.10编译安装
- PHP运行模式
- Android 访问WebService
- cloud instance 用户配置