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寄存器狀態時間不夠導致的。

      rtc初始化失敗.jpg

     通過查看ST的驅動庫,RTC寄存器同步這裏的設置的延時時間爲#define RTC_TIMEOUT_VALUE           1000U   即1000ms,原來驅動庫是基於系統定時器進行的延時,現在系統定時器用操作系統時鐘tick了,HAL_Delay函數採用的軟件延時來實現,通過查看分析代碼,HAL_Delay函數調用一個1us的延時函數,調用的時輸入的參數不正確,修改成如下,解決問題。

   hal_delay.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章