关于在Arduino下STM32编程——RTC函数解析

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

 

该库头文件引用:ui

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

 

 

初始化RTC相关时钟

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

官方老标准库里也是同样的:3d

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

使能写备份寄存器

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

 

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

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

 

失能写备份寄存器

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

 

设置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闹钟中断,并将中断处理函数给注销。

相关文章
相关标签/搜索