嵌入式学习之RTC时钟

1.RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。
补充:
(1)备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。我们一般用 BKP 来存储 RTC 的校验值或者记录一些重要的数据。执行以下操作可以使能对备份寄存器和RTC的访问:
● 通过设置寄存器
RCC_APB1ENR的PWREN和BKPEN
位来打开电源和后备接口的时钟
● 电源控制寄存器**(PWR_CR)的DBP**位来使能对后备寄存器和RTC的访问。
(2)关于备份寄存器的复位

2.RTC框图的理解:

在这里插入图片描述(1)通过设置RTC_PRL预分频器产生 1 秒的 RTC 时间基准 TR_CLK。
(2)RTC_DIV怎么用?因为我们一般是将TR_CLK设置为1s而且将RTC时钟设置为32.768KHz的外部时钟,所以分频系数会设置为32767,这个值会放到RTC_DIV去递减,所以我们可以去读两次RTC_DIV的值然后相减再乘以周期便得到一个更加精确到值。
在这里插入图片描述(2)图中的①为计数器,以1s为周期的话大约可及时100多年,完全够用。②为闹钟寄存器,系统时间按 TR_CLK 周期累加并与存储在 RTC_ALR 寄存器中的可编程时间相比较,若相等则触发中断(若开启)。
在这里插入图片描述三个中断:一个是秒中断,一个是溢出中断,一个是闹钟中断。
3.RTC外设的独特之处:
(1)RTC 内核完全独立于 RTC APB1 接口,而软件是通过 APB1 接口访问 RTC 的预分频值、计数器值和闹钟值的。但是相关可读寄存器只在 RTC APB1 时钟进行重新同步的 RTC 时钟的上升沿被更新,RTC 标志也是如此。
在这里插入图片描述就是说什么意思呢?意思就是每次要读寄存器的值必须判断是否同步,库函数是调用RTC_WaitForSynchro();,我们在修改控制寄存器 RTC_CRH/CRL 之前,必须先判断该位,是否已经同步了,如果没有则等待同步,在没同步的情况下修改 RTC_CRH/CRL 的值是不行的。(?)
(2)在软件修改 RTC_CNT/RTC_ALR/RTC_PRL 的值的时候,必须先通过RTOFF位判断上次对 RTC 寄存器的操作是否完成,如果没有,我们必须等待上一次操作结束才能开始下一次操作。然后软件置位CNF位,以允许进入配置模式。使用的库函数有:RTC_WaitForLastTask();和RTC_EnterConfigMode();
在这里插入图片描述在这里插入图片描述4.配置过程注意:
(1)使用外部振荡器一定要开启外部低速振荡器RCC_LSEConfig(RCC_LSE_ON);// 开启外部低速振荡器
(2)备份区域的使用也必须要使能备份区域时钟。

猜你喜欢

转载自blog.csdn.net/weixin_44142774/article/details/106244192