RTC初始化失败导致的CPU上电无法启动的问题

2019-7-21 17:21 [复制链接] 3 101

      先说一下系统环境 rtt 3.1.2,MCU STM32M103RC,基于上一次产品的开发已经成功应用到客户,目前运行很稳定,感觉中国自主开源的操作系统,感觉RTT团队开发出这么好的操作系统。现在进行产品功能升级,增加RTC功能,增加NTP时间同步功能。按教程一步一步加到工程,编译通过,由于使用的RTT 3.1.2,直接pkgs 有些软件包加入工程后还是由于版本不匹配导致无法编译,通过查看代码,查看其他示例程序,修改解决通过。
  ]& s: B) M" K      下载到STM32在线仿真测试后,经过测试一切正常。偶然一次断电再重新上电,STM32无法启动,问题出现来了,很奇怪,连接仿真器可以正常启动运行,断开仿真器就无法自己启动,查吧?
% H! \" ~, A" ~6 g
& \# G# ?1 j$ n
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-7-21 17:29:10 | 显示全部楼层
本帖最后由 fhqmcu 于 2019-7-21 17:31 编辑
" W! v+ f0 i8 K  w% M1 w$ o0 B4 e  X9 b. ~/ |0 V, q
     查找解决的问题的过程就是把新修改的工程一步一步复原来刚开始的状态,先是去除NTP功能代码,再去除RTC驱动。经过一步步复原测试到是增加RTC驱动后,程序无法上电启动。查看代码分析,加修改测试,定位到出问题的位置是在RTC硬件初始化时,HAL_RTC_Init函数内部同步RTC寄存器配置出现超时导致的。找到出问题的地方就好办,进一步分析代码,由于MCU等待RTC寄存器状态时间不够导致的。' ~7 b9 z* \8 M5 T
     6 W8 X& J0 ~1 B6 Q; z' O* U

3 R/ B7 [  @9 I) F. ~/ @. S
rtc初始化失败.jpg
使用道具 举报 回复
发表于 2019-7-21 17:30:06 | 显示全部楼层
本帖最后由 fhqmcu 于 2019-7-21 17:35 编辑
( N% {( t' ^8 P6 T2 L
* e' z$ a0 r9 ?7 H! I     通过查看ST的驱动库,RTC寄存器同步这里的设置的延时时间为#define RTC_TIMEOUT_VALUE           1000U   即1000ms,原来驱动库是基于系统定时器进行的延时,现在系统定时器用操作系统时钟tick了,HAL_Delay函数采用的软件延时来实现,通过查看分析代码,HAL_Delay函数调用一个1us的延时函数,调用的时输入的参数不正确,修改成如下,解决问题。
# X1 n: }3 J6 |4 L0 {* A3 {- q4 Y' G5 f; H
C:\Users\zhaoshimin\Desktop\rtc初始化失败.jpg$ K( S3 S/ R0 J: a* j3 `9 `0 ^
hal_delay.jpg
使用道具 举报 回复
发表于 2019-7-21 21:56:12 | 显示全部楼层
楼主很强哦,提出问题到解决问题只用了4分钟。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表