天天看點

STM32F103的RTC掉電不走時(有備用電池供電)問題簡述:問題分析:

問題簡述:

實驗環境:使用stm32cubemx配置生成了一個RTC的工程,使能了外部時鐘LSE,提供了備用電池VBTE。

問題:斷開主電源後(備用電池已經安裝好了),再次上電讀取RTC的值發現,數值為斷電前的數值。

問題分析:

斷電重新開機之後,RTC的資料沒有丢失,說明後備電池确實在為後備區域提供電源。

STM32F103的RTC掉電不走時(有備用電池供電)問題簡述:問題分析:

RTC供電

根據官方提供的框圖,可以看到RTC和LSE掉電後都是通過備用電池供電的。

按照描述,我配置了外部時鐘LSE也提供了外部供電VBTE,那麼在系統掉電後,RTC應該繼續計時才對。

我開始檢查配置相關的程式,通過仔細檢視程式,發現RTC的時鐘來源居然是LSI(我明明開啟了LSE的),如果是LSI的話掉電後就不工作了,當然RTC也不走時了。

STM32F103的RTC掉電不走時(有備用電池供電)問題簡述:問題分析:

RTC時鐘來源​​​​​

    回頭再看STM32Cubemx發現,時鐘樹中RTC的時鐘來源确實是LSI RC, 原來是自己太粗心,沒有選擇LSE,略坑呀,改為LSE後再覆寫原來的工程之後問題解決。

STM32F103的RTC掉電不走時(有備用電池供電)問題簡述:問題分析:

時鐘樹

    總結:

    1.RTC是個普通32位計數器(F103),1秒累加1次,計滿32位的話,大約需要136年,是以不必擔心溢出問題。是以常用LINUX時間戳來計算目前時間,即從1970年1月1日0時0分0秒,到目前時間經過了多少秒,進而得到目前的日期和時間。這個涉及到平年和閏年,稍微麻煩一點。

    2.RTC的時鐘來源有三個,LSI内部RC(預設)、HSE(外部高速時鐘)、LSE(外部低速時鐘),前兩個掉電都停止供電,LSE掉電後可以依靠VBTE供電工作。

    3.VBTE給LSE、RTC、和後備寄存器,通常可以往後備寄存器裡面随便寫個值,開機的時候讀取一個這個值複位沒有,如果VBTE也沒電了的話,說明RTC也不會走了,記錄的時間也是不對的,這個時候就要從新寫入時間了。

繼續閱讀