STM32单片机BKP备份寄存器和RTC实时时钟详解

文章目录

1. Unix时间戳

2. UTC/GMT

3. 时间戳转换

4. BKP简介

5. BKP基本结构

6. RTC简介

7. RTC框架图

8. RTC基本结构

9. 代码示例


1. Unix时间戳

实时时钟,本质上是一个定时器,专门用来产生年月日时分秒。

Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒。

时间戳是一个计数器数值,从1970年1月1日0时0分0秒开始,到现在总共所经过的秒数。

时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量。

世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间。

2. UTC/GMT

GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准。

UTC(Universal Time Coordinated)协调世界时是一种以原子钟为基础的时间计量系统。它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致。

3. 时间戳转换

C语言的time.h模块提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换。

函数作用

time_t time(time_t*);

获取系统时钟

struct tm* gmtime(const time_t*);

秒计数器转换为日期时间(格林尼治时间)

struct tm* localtime(const time_t*);

秒计数器转换为日期时间(当地时间)

time_t mktime(struct tm*);

日期时间转换为秒计数器(当地时间)

char* ctime(const time_t*);

秒计数器转换为字符串(默认格式)

char* asctime(const struct tm*);

日期时间转换为字符串(默认格式)

size_t strftime(char*, size_t, const char*, const struct tm*);

日期时间转换为字符串(自定义格式)

4. BKP简介

BKP(Backup Registers)备份寄存器,本质上就是RAM储存器。

BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。

TAMPER引脚产生的侵入事件将所有备份寄存器内容清除。

RTC引脚输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲。

存储RTC时钟校准寄存器。

用户数据存储容量:20字节(中容量和小容量)/ 84字节(大容量和互联型)。

手册建议

  • 如果没有外部电池,建议VBAT引脚接到VDD,就是VBAT和主电源接到一起,并且再连接一个100nf的滤波电容

5. BKP基本结构

STM32后备区域的特性:

  • 当VDD主电源掉电时,后备区域仍然可以由VBAT的备用电池供电。
  • 当VDD主电源上电时,后备区域供电会自动从VBAT切换到VDD。

数据寄存器:

  • 16位(存储2个字节)。
  • 中小容量设备有DR1~DR10,总共10个数据寄存器,每个寄存器存储2个字节,总容量为20字节。
  • 大容量和互联型设备有42个数据寄存器(DR)。

TAMPER引脚:

  • 用于引入检测信号(上升沿/下降沿),清除BKP所有内容以保证数据安全。

时钟输出:

  • 可以将RTC相关时钟从PC13位置的RTC引脚输出供外部使用。
  • 输出校准时钟时,可以配合校准寄存器对RTC的误差进行校准。

6. RTC简介

RTC (Real Time Clock):实时时钟。

RTC是一个独立的定时器,可为系统提供时钟和日历的功能。

RTC和时钟配置系统处于后备区域,系统复位时数据不清零,VDD(2.0 - 3.6V)断电后可借助VBAT(1.8 - 3.6V)供电继续走时。

32位的可编程计数器,可对应Unix时间戳的秒计数器。

20位的可编程预分频器,可适配不同频率的输入时钟。

RTCCLK可选择三种RTC时钟源:

  • HSE时钟除以128(通常为8MHz/128)
  • LSE振荡器时钟(通常为32.768KHz)
  • LSI振荡器时钟(40KHz)

时钟信号解释

  • HSE = 高速外部时钟信号
  • HSI = 高速内部时钟信号
  • LSI = 低速内部时钟信号
  • LSE = 低速外部时钟信号
  • H (High):高速,L (Low):低速,E (External):外部,I (Internal):内部

使用说明

  1. 高速时钟:一般供内部程序运行和主要外设使用。
  2. 低速时钟:一般供RTC、看门狗等东东使用。
  3. 只有选择LSE振荡器时钟,才能实现RTC主电源掉电继续走时的功能。

7. RTC框架图

可编程预分频器

  • RTC_CNT每秒自增,因此驱动计数器的时钟 TR_CLK 需要是1Hz的信号。实际提供RTC模块的时钟(RTCCLK)频率较高,因此RTCCLK经过20位RTC预分频器(1~2^20分频),保证输出给计数器的频率为1Hz。
  • 灰色填充区域均是后备区域。

分频和计数

  • 输入时钟RTCCLK,经过RTC预分频器(由重装载寄存器RTC_PRL和余数寄存器RTC_DIV控制),计数器重装值ARR和CNT进行分频。

RTC_CNT

  • 可以作为Unix时间戳的秒计数器,再借用time.h的函数可以方便地得到年月日时分秒。

闹钟寄存器RTC_ALR

  • 32位寄存器,用来设置闹钟。设置闹钟时,将ALR写入一个秒数,当CNT的值等于ALR设定的闹钟值时,就会产生RTC_Alarm闹钟信号。通过中断系统,在闹钟中断里执行相应操作。
  • 同时,闹钟信号可以让STM32退出待机模式。
  • 此外,这个闹钟值是一个定值,只能响一次。若想实现周期闹钟,在每次闹钟响过后,都需要重新设置下一次闹钟时间。

中断信号

  • RTC_Second(秒中断):来自于CNT的输入时钟。开启此中断后,程序会每秒进入一次RTC中断。
  • RTC_Overflow(溢出中断):来自CNT右边,表示CNT的32位计数器计满溢出时触发一次中断。
  • RTC_Alarm(闹钟中断):当计数器的值和闹钟值相等时触发中断,同时可以唤醒设备退出待机模式。

中断标志位和中断输出控制

  • **F(Flag)**结尾的是对应的中断标志位。
  • **IE(Interrupt Enable)**结尾的是中断使能。
  • 最后三个信号通过一个或汇聚到NVIC中断控制器。

APB1总线和APB1接口

  • 程序读写寄存器的地方可以通过APB1总线完成,RTC位于APB1总线上的设备。

退出待机模式:唤醒机制

  • 闹钟信号和WKUP引脚都可以唤醒设备,退出待机模式。

8. RTC基本结构

RTCCLK的配置和信号处理流程

时钟来源配置

  • 最左边的RTCCLK时钟来源在RCC中配置,可以从三个时钟中选择一个作为RTCCLK。

时钟预分频

  • 选择的RTCCLK经过预分频器对时钟进行分频。
  • 余数计数器是一个自减计数器,存储当前的计数值。
  • 重装寄存器决定计数目标和分频值。
  • 分频后得到1Hz的秒计数信号,传递给32位计数器,每秒自增一次。

闹钟设定

  • 32位计数器下有一个32位的闹钟值,可以设定闹钟时间。

中断信号触发

  • 右侧有三个信号可以触发中断:秒信号、计数器溢出信号和闹钟信号。
  • 这三个信号通过中断输出控制,进行中断使能。
  • 启用的中断信号才能传递到NVIC,然后向CPU申请中断。

程序配置步骤

配置数据选择器:选择RTCCLK时钟来源。

配置重装寄存器:选择分频系数。

配置32位计数器

  • 进行日期时间的读写。
  • 如果需要闹钟,配置32位闹钟值。

配置中断

  • 启用中断,再配置NVIC。
  • 最后,编写对应的中断函数。

9. 代码示例

STM32读写备份寄存器和实时时钟

STM32读写备份寄存器和实时时钟-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CausalMMM:基于因果结构学习的营销组合建模

1. 摘要 在线广告中,营销组合建模(Marketing Mix Modeling,MMM) 被用于预测广告商家的总商品交易量(GMV),并帮助决策者调整各种广告渠道的预算分配。传统的基于回归技术的MMM方法在复杂营销场景…

Windows10中端口被占用处理方法

前言 在Windows 10中,查看端口被占用情况的方法主要依赖于命令行工具netstat。以下是详细步骤,以及必要的解释和归纳: 打开命令提示符 方法1:使用快捷键Win R,打开“运行”对话框,输入cmd,然…

大疆炸机后MOV修复方法(DJI Inspire 3)

dji大疆可以说是无人机中的华为,产品线之广性能之高让高傲的美国人侧面,质量和性价比才是王道。另外产品线的细分也是制胜法宝,无论是手持、农用机、特殊无人机还是影视级产品DJI都有涉及,给人的感觉就是在无人机细分方面它已经无…

java泛型学习

没有java泛型会存在的问题 假设我们有一个方法,希望通过传递不同类型的参数,输出不同类型的对象值。正常情况下我们可能会写不同的方法来实现,但是这样会导致类不断增加,并且类方法很相似,不能够复用。进而导致类爆炸…

基于顺序存储的环形队列算法库构建

学习贺利坚老师基于数组的环形队列 数据结构之自建算法库——顺序环形队列_下空队列q中依次入队列数据元素abc-CSDN博客文章浏览阅读5.2k次,点赞6次,收藏6次。本文针对数据结构基础系列网络课程(3):栈和队列中第9课时环形队列的存储及基本操…

华为---理解OSPF Route-ID(五)

9.5 理解OSPF Route-ID 9.5.1 原理概述 一些动态路由协议要求使用Router-ID作为路由器的身份标示,如果在启动这些路由协议时没有指定Router-ID,则默认使用路由器全局下的路由管理Router-ID。 Router-ID选举规则为,如果通过Router-ID命令配置了Router-…

1.22 LeetCode总结(基本算法)_位运算

进制的概念 进制即进位计数制,是利用固定的数字符号和统一的规则的带进位的计数方法。 任何一种进位计数制都有一个基数,基数为 X 的进位计数制称为 X 进制,表示每一个数位上的数运算时都是逢 X 进一。 504. 七进制数 手法1:当…

APP启动流程解析

简单概括启动微信的流程就是: 1.Launcher通知AMS 要启动微信了,并且告诉AMS要启动的是哪个页面也就是首页是哪个页面 2.AMS收到消息告诉Launcher知道了,并且把要启动的页面记下来 3.Launcher进入Paused状态,告诉AMS&#xff0c…

[FreeRTOS 基础知识] 互斥访问与回环队列 概念

文章目录 为什么需要互斥访问?使用队列实现互斥访问休眠和唤醒机制环形缓冲区 为什么需要互斥访问? 在裸机中,假设有两个函数(func_A, func_B)都要修改a的值(a),那么将a定义为全局变…

css-vxe列表中ant进度条与百分比

1.vxe列表 ant进度条 <vxe-column field"actualProgress" title"进度" align"center" width"200"><template #default"{ row }"><a-progress:percent"Math.floor(row.actualProgress)"size"s…

Java程序之可爱的小兔兔

题目&#xff1a; 古典问题&#xff0c;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少? 程序分析&#xff1a; 兔子的规律为数列1,1,2,3,…

C++基础知识——《缺省参数》和《函数重载》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

【Android进阶学习】Android-广播接收器(Broadcast-Receivers)

android:theme“style/AppTheme” > 现在&#xff0c;无论什么时候Android设备被启动&#xff0c;都将被广播接收器MyReceiver所拦截&#xff0c;并且在onReceive()中实现的逻辑将被执行。 有许多系统产生的事件被定义为类Intent中的静态常量值。下面的表格列举了重要的系…

微积分-导数1(导数与变化率)

切线 要求与曲线 C C C相切于 P ( a , f ( a ) ) P(a, f(a)) P(a,f(a))点的切线&#xff0c;我们可以在曲线上找到与之相近的一点 Q ( x , f ( x ) ) Q(x, f(x)) Q(x,f(x))&#xff0c;然后求出割线 P Q PQ PQ的斜率&#xff1a; m P Q f ( x ) − f ( a ) x − a m_{PQ} \…

AES 高级加密加速器实验

1、AES介绍 Kendryte K210 内置 AES&#xff08;高级加密加速器&#xff09;&#xff0c;相对于软件可以极⼤的提高 AES 运算速度。 AES 加速器支持多种加密/解密模式&#xff08;ECB,CBC,GCM&#xff09;,多种⻓度的 KEY&#xff08;ECB,CBC,GCM&#xff09;的运算。 AES 加…

Linux常用环境变量

Linux常用环境变量 一、常用的默认的shell环境变量二、环境变量 PATH三、持久化修改环境变量四、常用的环境变量 一、常用的默认的shell环境变量 1、当我们在shell命令行属于一个命令&#xff0c;shell解释器去解释这个命令的时候&#xff0c;需要先找到这个命令. 找到命令有两…

鸿蒙 HarmonyOS NEXT星河版APP应用开发—上篇

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

【Linux 基础】文件与目录管理

1. 文件和目录的基本概念 文件&#xff1a;是数据的集合&#xff0c;可以是文本、图像、视频等。 目录&#xff08;也称为文件夹&#xff09;&#xff1a;是文件和子目录的集合&#xff0c;用于组织文件。 2. 目录和路径 绝对路径&#xff1a;从根目录&#xff08;/&#x…

2021-03-29:加密与解密

前段时间导师分配的任务主要是看《加密与解密》这本书&#xff0c;“书本写的很详细&#xff0c;认真看会看懂的&#xff01;” 是的啊&#xff0c;书本写的很详细&#xff0c;可是作为一个没基础的小白看起来还是挺吃力的&#xff0c;概念一个接一个的出现&#xff0c;虽然看…

Android应用--简、美音乐播放器添加电话监听

3. 控制音量 4. 获取专辑图片 5. 在线下载歌词 6. 在线搜索音乐 7. 在线下载音乐 8. 实现有趣功能–甩歌 9. 界面美化–实现专辑倒影 10.实现左右界面切换 11.实现在通知栏显示播放状态 12.实现音乐播放的桌面小控件 暂时想到这些功能&#xff0c;如果朋友们有什么建…