关于在Arduino下STM32编程——RTC函数解析
注意:相关RTC基础知识这里不提!
该库头文件引用:
初始化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函数解析的更多相关文章
- c/c++ 网络编程 getaddrinfo 函数
网络编程 getaddrinfo 函数 解析网址,返回IP地址. 例子: #include <iostream> #include <string.h> #include &l ...
- Arduino下LCD1602综合探究(上)——1602的两种驱动方式,如何使LCD的控制编程变得更简单
一.前言: LCD ( Liquid Crystal Display 的简称)液晶显示器,已经逐渐替代CRT成为主流的显示设备之一,因此也成为了单片机发烧友绕不过的话题之一:而LCD1602更是很多单 ...
- 基于Arduino、STM32进行红外遥控信号接收
catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...
- windows下的getopt/getoptlong函数
windows下的getopt/getoptlong函数 getopt/getopt_long函数是GNU C中的函数,在linux编程中很常用到.这里就不介绍了. windows下没有找到类似的函数 ...
- Linux下多线程编程
一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...
- 初尝Windows 下批处理编程
本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...
- 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xL ...
- linux 下 poll 编程
poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...
- Linux下Socket编程的端口问题( Bind error: Address already in use )
Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...
随机推荐
- [TimLinux] JavaScript BOM浏览器对象模型
1. 简介 ECMAScript是JavaScript的核心,但是如果要在WEB中使用JavaScript,那么BOM则无疑才是真的的核心.BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网 ...
- HDU-6114
車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了 ...
- 【Git】学习开始
[Git]学习开始 转载:https://www.cnblogs.com/yangchongxing/p/10172683.html 在线电子书籍:https://git-scm.com/book/z ...
- 3个Spring Boot项目调优的方式
前言 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 一.修改配置文件 关于修改配置文件applicati ...
- python基础入门 字典
字典 字典---->dict 字典是无序的,可变的 关联性强 键值对 键:使用不可变的数据类型(可哈希),键是唯一的 值:可以任意 定义一个字典 dic = {}#定义字典 字典的增删改查 ...
- windows系统下sublime text3开发工具前端配置
1.打开https://www.sublimetext.com/3下载最新版Sublime Text 3安装. 2.打开packagecontrol安装方法按提示安装packagecontrol,或者 ...
- MapStruct 映射工具
# MapStruct 映射工具 本篇主要讲解MapStruct 一款映射工具,只需简单的定义一个Mapper接口,在编译期间,MapStruct将生成此接口的实现,据说MapStruct性能最高是 ...
- Test 1022
T1 AERODROM (二分答案 TimeLimit: 1000MS Memory Limit: 32768KB \(N\)个登机口,办理登机业务,第\(i\)个窗口的单位办理时间为\(T_i\), ...
- 聊一聊JS输出为[object,object]是怎么回事
JS输出为[object object] 今天在学习ES6中的 Symbol 数据类型时,在写demo时控制台输出为 Symbol[object object] ,当时有点疑惑,查阅了相关资料后搞清楚 ...
- c++之基础知识
一.变量 作用:给一段指定的内存空间,方便操作这段内存. 语法:数据类型 变量名 = 初始值.int a = 10; 二.常量 作用:用于记录程序中不可更改的数据 c++定义常量有两种方式: #def ...