注意:相关RTC基础知识这里不提!函数
该库头文件引用:ui
Arduino版的库里初始化配置PWR时钟、初始化配置备份寄存器时钟、复位备份寄存器(RTC时钟须要用到备份寄存器相关东西)spa
官方老标准库里也是同样的:3d
设置寄存器RCC_APB1ENR的PWREN和BKPEN位打开电源和后备时钟。blog
在Arduino版库里,写备份寄存器使能是操做电源相关里的CR寄存器的DBP位置1get
在老版标准库里也是这样。同步
电源后备寄存器(PWR_CR)的DBP位使能对后备寄存器和RTC的访问。源码
那么不难理解,失能写备份寄存器,就是将DBP位置0了。it
库代码截图里能够看到,若是不写入参数,那么就默认使用 RTClock(RTCSEL_HSE); 外部高速时钟来做为RTC时钟源。基础
个人代码中,选择了LSE,也就是外部低速时钟来做为时钟源。
rtc_init();函数里实现了设置和打开相应时钟。
time_t 类型就是 unsigned long类型。
追踪rtc_set_count();函数:
该函数所在文件:
等待最近一次RTC寄存器同步完成
等待最近一次对RTC写操做完成
RTC进入配置模式的源码:
等待写操做完成,配置RTC的CRL寄存器的CNF位。
由于红线的话,因此上面的rtc_set_count函数才会有进入配置模式和退出配置模式的配套语句。
源码以下:
定位到rtc_get_count();函数:
很简单,就是把RTC计数寄存器的值读出来合并返回。
RTC有几种闹钟,一种是秒闹钟,每过一秒进入一次;一种就是对于时间的对比的闹钟,到了时间点就产生一次闹钟。
下面是设置时间对比的闹钟源码:
追踪到rtc_set_alarm()函数:
前三句话和配置模式老生常谈。
后面是设置闹钟寄存器的值。
下面追踪到rtc_attach_interrupt函数:
使能闹钟中断,switch里是第四个case。再使能闹钟优先级。
顾名思义,能够修改RTC的闹钟时间。注意:该函数是修改,并不会建立闹钟中断。
失能RTC闹钟中断,并将中断处理函数给注销。