关于在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] Python 类型与运算
1. 内建(built-in)数据类型种类 数字类型:int(), float() 顺序(sequence): 字符串:str() 元祖:tuple() 列表:list() 字典:dict() 集合: ...
- CodeForces-1006B-Polycarp's Practice
B. Polycarp's Practice time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 国内下载vscode速度慢解决
找到对应的文件,点击下载,会出现一个类似下面的链接: https://az764295.vo.msecnd.net/stable/f06011ac164ae4dc8e753a3fe7f9549844d ...
- 如何上传项目到github
喜欢的同学可以看一下原文,讲得更加详细哦 原文地址:http://www.cnblogs.com/cxk1995/p/5800196.html 首先你需要一个github账号,所有还没有的话先去注册吧 ...
- 在Atmel Studio7中创建ASF项目
使用ASF自带例程的方式创建程序是很方便,但是因为系统例程支持的ATMEL开发板往往和用户板配置不同,所以我们需要自己创建项目.下面介绍在AS7.0中快速创建一个ASF项目的方法. 1.首先从菜单开始 ...
- Microsemi Libero使用技巧——使用命令行模式下载程序
前言 在工程代码编译完成之后,如果需要给某个芯片下载程序时,或者是工厂量产烧录程序时,我们不需要把整个工程文件给别人,而只需要把生成的下载文件给别人,然后使用FlashPro就可以单独下载程序文件了. ...
- [译]C# 7系列,Part 7: ref Returns ref返回结果
原文:https://blogs.msdn.microsoft.com/mazhou/2017/12/12/c-7-series-part-7-ref-returns/ 背景 有两种方法可以将一个值传 ...
- C# 中的 bool、char 和 string 类型
上一篇(地址:https://www.vinanysoft.com/c-sharp-basics/data-types/fundamental-numeric-types/)只介绍了基本数值类型,本篇 ...
- jQuery实现电梯导航特效
功能描述: 当滚动条滑到某个位置时,显示电梯导航: 当用户滚动滚动条时,让电梯导航的选中状态和当前滚动到的区域保持一致: 当用户点击电梯导航时,滚动条滚动到被点击导航对应的区域 准备工作: 首先将jQ ...
- 现代前端库开发指南系列(二):使用 webpack 构建一个库
前言 在前文中,我说过本系列文章的受众是在现代前端体系下能够熟练编写业务代码的同学,因此本文在介绍 webpack 配置时,仅提及构建一个库所特有的配置,其余配置请参考 webpack 官方文档. 输 ...