最初调试STM32的万年历,使用的是内部的 LSI晶振作为RTC晶振来源,发现有两个问题:
第一:由于LSI晶振频率大约在40KHZ附近,实际上会在30~60KHZ之间波动,导致计时不准,基本上一个小时会有1分钟左右的偏差。
第二: 由于LSI内部晶振,在断电的时候,并不在后备供电区域范围内,而外接的3.3V电池连接到VBAT上,只给后备供电区域供电,导致系统断电后,电池只能维持后备RTC的计数,并没有给LSI晶振供电(见下图所示:),导致RTC总是保持在断电之前的时间。虽然重新上电后又可以继续运行。但是需要重新校准了
。
最后使用了外界的32.768KHZ的外部LSE晶振作为RTC晶振来源,调试过程中发现,反复修改,问题和之前使用LSI没有区别。
后面仔细回想才发现了问题所在,因为调试过程中加了if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)的判断,由于电池一直接到MCU上,
虽然反复的刷程序,都没有改变备份数据寄存器的值。而RTC的晶振来源一经确定,中途是不能改变的,除非全部复位备份域。
最后通过暂时取下电池(或暂时短路电池),又或者复位备份域,才成功重新设置为外部LSE晶振。时间精度的问题和断电RTC依旧运行的问题得到了解决。
阅读(24583) | 评论(1) | 转发(0) |