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

关于在Arduino下STM32编程——RTC函数解析的更多相关文章

  1. c/c++ 网络编程 getaddrinfo 函数

    网络编程 getaddrinfo 函数 解析网址,返回IP地址. 例子: #include <iostream> #include <string.h> #include &l ...

  2. Arduino下LCD1602综合探究(上)——1602的两种驱动方式,如何使LCD的控制编程变得更简单

    一.前言: LCD ( Liquid Crystal Display 的简称)液晶显示器,已经逐渐替代CRT成为主流的显示设备之一,因此也成为了单片机发烧友绕不过的话题之一:而LCD1602更是很多单 ...

  3. 基于Arduino、STM32进行红外遥控信号接收

    catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...

  4. windows下的getopt/getoptlong函数

    windows下的getopt/getoptlong函数 getopt/getopt_long函数是GNU C中的函数,在linux编程中很常用到.这里就不介绍了. windows下没有找到类似的函数 ...

  5. Linux下多线程编程

    一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...

  6. 初尝Windows 下批处理编程

    本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...

  7. 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xL ...

  8. linux 下 poll 编程

    poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...

  9. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

随机推荐

  1. JVM内运行时数据区

    JVM的基本区域: 类加载子系统 运行时数据区(内存区域) 执行引擎 运行时数据区域 方法区(Method Area) 类的所有字和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来 ...

  2. flink基本原理

    一.简介 开源流式处理系统在不断地发展,从一开始只关注低延迟指标到现在兼顾延迟.吞吐与结果准确性,在发展过程中解决了很多问题,编程API的易用性也在不断地提高.本文介绍一下 Flink 中的核心概念, ...

  3. 【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  4. [知也无涯]GAN对人脸算法的影响

    红绣被,两两间鸳鸯.不是鸟中偏爱尔,为缘交颈睡南塘.全胜薄情郎. 看到一篇GAN对人脸图像算法的影响,决心学习一个. 人脸检测 这也是我最关注的模块.文章推荐了极小面部区域人脸识别Finding ti ...

  5. Microsoft store应用商店打不开0x80131500

    开始安装Windows的Linux子系统发现没办法打开应用商店,开始了三个小时的挖贴之路,最终于百度贴吧最底层发现解决办法,同样错误貌似只有两个人.... 首先介绍一下网上普遍的方法↓↓↓ 第一种—— ...

  6. hdu 6299 Balanced Sequence (贪心)

    Balanced Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. django基础之day08,ajax结合sweetalert的使用

    models.py文件 from django.db import models class User(models.Model): username=models.CharField(max_len ...

  8. Java设计模式整理

    一.创建型模式 1.抽象工厂模式(AbstractFactory): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 案例:https://www.cnblogs.com/lfx ...

  9. HttpRunner学习8--使用debugtalk.py辅助函数

    前言 在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以 ...

  10. GrimTheRipper: 1 Vulnhub Walkthrough

    靶机下载: https://www.vulnhub.com/entry/grimtheripper-1,350/ 主机层面端口扫描: ╰─ nmap -p1-65535 -A 10.10.202.15 ...