RTC的初始化,配置及使用请参考固件库(此处略去)
STM32F207的RTC与备分寄存器
STM32F207具有20个32位的备分寄存器,能够存储共计80字节的内容,当入侵检测(前文中提到的“改变检查”)中断发生时将会被复位,而系统复位,以及系统从其他低功耗模式被唤醒都不会对RTC和BKP造成影响。备分寄存器(BKP)与RTC有什么关系呢,我们从实际来分析一下。我们的RTC和备分寄存器都是可以在系统掉电的情况下由电池进行供电的,假如没有BKP,当系统电源断开后,或者系统复位后,或者系统从低功耗模式被唤醒后,它定要对某些模块进行初始化,而这个时候RTC由电池供电,其数据具有连续性,如果系统不能判断RTC是否该重新初始化,那系统只能对其进行初始化导致系统时间回到默认,用户或上位机软件又得对其进行修改,增加了应用的复杂性。这个时候如果加上BKP,因为它也是可以由电池供电的,掉电丢失信息,意味着如果在电池供电正常的情况下,如果系统VDD掉电,BKP的内容就会保留下来,这样的话,我们在第一次配置好RTC后就可以通过在BKP中某个寄存器内写入一个特片标志值,便可以在系统复位后用于判断,避免对RTC的重配置。
为了避免意外的写入操作,在系统复位后,对BKP和RTC的访问都被禁止,并且备分区BKP被保护起来。需要特殊的指令序列后才可以对其进行访问。
举个例子说明,假如第一次配置完RTC后我们往备分寄存器0中写入一个值:0x32F2,则每次复位后我们配置RTC就用下面一段代码即可:
if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2)
{
/* RTC configuration */
RTC_Config();
/* Configure the RTC data register and RTC prescaler */
RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv;
RTC_InitStructure.RTC_SynchPrediv = SynchPrediv;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
/* Check on RTC init */
if (RTC_Init(&RTC_InitStructure) == ERROR)
{
printf("\n\r /!\\***** RTC Prescaler Config failed ********/!\\ \n\r");
}
/* Configure the time register */
RTC_TimeRegulate();
}
当然里面有几个函数,需要你根据自已的需要进行选择性的配置和修改。
共2条
1/1 1 跳转至页
【STM32回顾】-- STM32F207的RTC与备份寄存器配合完成万年历

关键词: STM32 回顾 STM32F207 备份 寄存器
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【LP-MSPM0L1306】适配 RT-Thread Nano被打赏23分 |