STM32關於RTC的一些有意思的發現

轉自奔跑的博客


出現的現象:使用野火的RTC例程,在軟件仿真時如果不需要配置,則程序會死在 RTC_WaitForSynchro() 函數中。而下載到硬件上時,有時候可以跑,有時候也會在該函數中死循環。

可能的原因:
首先,一定要確認是否使能了對後備寄存器和RTC的訪問。
系統復位後,對後備寄存器和RTC的訪問被禁止,這是爲了防止對後備區域(BKP)的意外寫操
作。執行以下操作將使能對後備寄存器和RTC的訪問:
● 設置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能電源和後備接口時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
● 設置寄存器PWR_CR的DBP位,使能對後備寄存器和RTC的訪問
PWR_BackupAccessCmd(ENABLE);
另外還要使能RTC時鐘 RCC_RTCCLKCmd(ENABLE); 雖然該函數的說明中說只在RCC_RTCCLKConfig()函數調用之後才能調用,但是實際上如果不調用該函數,仿真時就會在 RTC_WaitForSynchro() 函數中死循環,等待RTC時鐘同步。
也就是說,不論是否需要配置RTC寄存器,每次系統復位都需要執行如下操作:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_RTCCLKCmd(ENABLE);

其次,STM32的RTC對外部LSE要求比較高,最好使用負載電容爲6pF的晶振。在芯片的DataSheet中有明確的說明,不能使用12.5pF的晶振。“ To avoid exceeding the maximum value of CL1 and CL2 (15 pF) it is strongly recommended to use a resonator with a load capacitance CL≤ 7 pF. Never use a resonator with a load
capacitance of 12.5 pF.”




原文地址:http://www.elecbench.com/%e5%85%b3%e4%ba%8estm32%e4%bd%bf%e7%94%a8rtc%e6%97%b6%e5%a4%8d%e4%bd%8d%e5%90%8e%e7%a8%8b%e5%ba%8f%e6%ad%bb%e5%9c%a8-rtc_waitforsynchro-%e5%87%bd%e6%95%b0%e4%b8%ad%e7%9a%84%e9%97%ae%e9%a2%98/

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