简介
RTC时钟是一个独立的定时器,可以在后备电源不掉电的情况下一直运行。在对应的软件配置下一般可以做时钟日历功能。
RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即使系统复位或者待机唤醒后RTC的设置和时间都维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在设置时间之前,要取消备份区域(BKP)写保护。
RTC框图
灰色部分属于后备区域,在VDD掉电的情况下可在VBAT的驱动下继续工作 。这部分包括RTC的分频器,计数器以及闹钟控制器。
(1)APB1接口:用来和APB1总线连接,通过APB1总线可以访问RTC相关寄存器,对齐进行读写操作。
(2)RTC核心:由一组可编程计数器组成,分成两个模块。第一个模块是RTC的预分频模块,它可以编程产生一个1秒的RTC时间基准TR_CLK,RTC的预分频模块包括了一个20位的可编程分频器(预分频器)。如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位可编程计数器,可被初始化位当前系统的时间,一个32位计数器,按秒钟计算,可以记录的时间长达136年之久。
RTC还有一个闹钟寄存器RTC_ALR,用于产生闹钟,如果RTC中的可编程计数器与RTC_ALR寄存器中的可编程时间相等,且在RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。
由于备份域的存在,所以 RTC 内核可以完全独立于 RTC APB1 接口。而软件是通过 APB1接口访问 RTC 的预分频值、计数器值和闹钟值的。但是相关可读寄存器只在 RTC APB1 时钟进行重新同步的 RTC 时钟的上升沿被更新, RTC 标志也是如此。这就意味着,如果 APB1 接口刚刚被开启之后,在第一次的内部寄存器更新之前,从 APB1 上读取的 RTC 寄存器值可能被破坏了(通常读到 0)。因此,若在读取 RTC 寄存器曾经被禁止的 RTC APB1 接口,软件首先必须等待 RTC_CRL 寄存器的 RSF 位(寄存器同步标志位, bit3)被硬件置 1。