注意:相关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闹钟中断,并将中断处理函数给注销。