zoukankan      html  css  js  c++  java
  • 关于在Arduino下STM32编程——RTC函数解析

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

  • 相关阅读:
    方法的封装与调用(十)
    适配器设计模式及GenericServlet(九)
    错误页设置,设置HTTP状态码404,500(八)
    设置默认首页(七)
    ServletContext接口(六)
    javax.servlet.ServletConfig接口(五)
    C语言第2天基本运算
    再议extern和include的作用
    C语言中的++和--
    C语言培训第一天
  • 原文地址:https://www.cnblogs.com/KeeganLu/p/11970223.html
Copyright © 2011-2022 走看看