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

     先交代一下使用的操作系统环境rt thread 3.1.2,MCU STM32M103RC,基于上一次产品的开发已经成功应用到客户,目前运行很稳定,感谢中国自主开源的操作系统,感谢RTT团队开发出这么好的操作系统。现在进行产品功能升级,增加RTC功能,增加NTP时间同步功能。按教程一步一步加到工程,编译通过,由于使用的RTT 3.1.2,直接pkgs 有些软件包加入工程后还是由于版本不匹配导致无法编译,通过查看代码,查看其他示例程序,修改解决通过。
      下载到STM32在线仿真测试后,经过测试一切正常。偶然一次断电再重新上电,STM32无法启动,问题出现来了,很奇怪,连接仿真器可以正常启动运行,断开仿真器就无法自己启动,查吧?

       查找解决的问题的过程就是把新修改的工程一步一步复原来刚开始的状态,先是去除NTP功能代码,再去除RTC驱动。经过一步步复原测试到是增加RTC驱动后,程序无法上电启动。查看代码分析,加修改测试,定位到出问题的位置是在RTC硬件初始化时,HAL_RTC_Init函数内部同步RTC寄存器配置出现超时导致的。找到出问题的地方就好办,进一步分析代码,由于MCU等待RTC寄存器状态时间不够导致的。

      Rtthread 3.1.2 RTC初始化失败导致的CPU上电无法启动的问题_第1张图片

     通过查看ST的驱动库,RTC寄存器同步这里的设置的延时时间为#define RTC_TIMEOUT_VALUE           1000U   即1000ms,原来驱动库是基于系统定时器进行的延时,现在系统定时器用操作系统时钟tick了,HAL_Delay函数采用的软件延时来实现,通过查看分析代码,HAL_Delay函数调用一个1us的延时函数,调用的时输入的参数不正确,修改成如下,解决问题。

   Rtthread 3.1.2 RTC初始化失败导致的CPU上电无法启动的问题_第2张图片

你可能感兴趣的:(编程经验)