注意:相关RTC基础知识这里不提!

 

该库头文件引用:

#include <RTClock.h>
 
该库所在Arduino位置:

 

 

初始化RTC相关时钟

Arduino版的库里初始化配置PWR时钟、初始化配置备份寄存器时钟、复位备份寄存器(RTC时钟需要用到备份寄存器相关东西)

官方老标准库里也是一样的:

设置寄存器RCC_APB1ENR的PWREN和BKPEN位打开电源和后备时钟。

使能写备份寄存器

在Arduino版库里,写备份寄存器使能是操作电源相关里的CR寄存器的DBP位置1

 

在老版标准库里也是这样。

电源后备寄存器(PWR_CR)的DBP位使能对后备寄存器和RTC的访问。

 

失能写备份寄存器

那么不难理解,失能写备份寄存器,就是将DBP位置0了。

 

设置RTC时钟

库代码截图里可以看到,如果不写入参数,那么就默认使用 RTClock(RTCSEL_HSE); 外部高速时钟来作为RTC时钟源。

 

我的代码中,选择了LSE,也就是外部低速时钟来作为时钟源。

 

 

 

rtc_init();函数里实现了设置和打开相应时钟。

 

 

 

写入RTC时间

time_t 类型就是 unsigned long类型。

 

 

 

追踪rtc_set_count();函数:

该函数所在文件:

 

 

等待最近一次RTC寄存器同步完成

等待最近一次对RTC写操作完成

 

RTC进入配置模式的源码:

 

等待写操作完成,配置RTC的CRL寄存器的CNF位。

 

 

 因为红线的话,所以上面的rtc_set_count函数才会有进入配置模式和退出配置模式的配套语句。

 

读出RTC时间

源码如下:

 

定位到rtc_get_count();函数:

 

 

 

很简单,就是把RTC计数寄存器的值读出来合并返回。

 

创建RTC闹钟中断

 

RTC有几种闹钟,一种是秒闹钟,每过一秒进入一次;一种就是对于时间的对比的闹钟,到了时间点就产生一次闹钟。

下面是设置时间对比的闹钟源码:

 

 

 

追踪到rtc_set_alarm()函数:

 

 

 前三句话和配置模式老生常谈。

后面是设置闹钟寄存器的值。

 

下面追踪到rtc_attach_interrupt函数:

 

 

 

使能闹钟中断,switch里是第四个case。再使能闹钟优先级。

 

设置RTC闹钟时间

 

顾名思义,可以修改RTC的闹钟时间。注意:该函数是修改,并不会创建闹钟中断。

 

解除RTC闹钟中断

 

失能RTC闹钟中断,并将中断处理函数给注销。

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/KeeganLu/p/11970223.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!