当前位置: 首页 > news >正文

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博客

相关文章:

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

文章目录 1. Unix时间戳 2. UTC/GMT 3. 时间戳转换 4. BKP简介 5. BKP基本结构 6. RTC简介 7. RTC框架图 8. RTC基本结构 9. 代码示例 1. Unix时间戳 实时时钟,本质上是一个定时器,专门用来产生年月日时分秒。 Unix 时间戳(Unix T…...

vue3+ts 使用vue3-ace-editor实现Json编辑器

1、效果图 输入代码,点击格式化就出现以上效果,再点击压缩,是以下效果2、安装 npm i vue3-ace-editor 3、使用 新建aceConfig.js文件 // ace配置,使用动态加载来避免第一次加载开销 import ace from ace-builds// 导入不同的主…...

黑马HarmonyOS-NEXT星河版实战

"黑马HarmonyOS-NEXT星河版实战"课程旨在帮助学员深入了解HarmonyOS-NEXT星河版操作系统的开发和实际应用。学员将学习操作系统原理、应用开发技巧和界面设计,通过实战项目提升技能。课程注重实践与理论相结合,为学员提供全面的HarmonyOS开发经…...

PCL 三次样条插值(二维点)

一、简介 在插值计算中,最简单的分段多项式近似应该是分段线性插值,它由连接一组数据点组成,仅仅只需要将这些点一一用直线进行顺序相连即可。不过线性函数插值的缺点也很明显,就是在两个子区间变化的比较突兀,也就是没有可微性(不够光滑)。因此我们需要更为符合物理情况…...

HTTP/3 协议学习

前一篇: HTTP/2 协议学习-CSDN博客 HTTP/3 协议介绍 HTTP/3 是互联网上用于传输超文本的协议 HTTP 的第三个主要版本。它是 HTTP/2 的后继者,旨在进一步提高网络性能和安全性。HTTP/3 与前两个版本的主要区别在于它使用了一个完全不同的底层传输协议—…...

数据库-数据定义和操纵-DML语言的使用

为表的所有字段插入数据: INSERT INTO 表名 (字段名) VALUES (内容); 更新表中指定的内容: update语句三要素: 需要更新的表(table)名; 需要更新的字段(column)名和它的新内容(valu…...

BeanUtils.populate()的用法总结

BeanUtils.populate()的用法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java中,BeanUtils.populate()是Apache Commons BeanUtils库提供…...

IDEA 学习之 热加载问题(Hot Swap)

目录 1. IDEA 自带热加载1.1. 热加载快捷键1.2. 热加载范围 1. IDEA 自带热加载 1.1. 热加载快捷键 系统快捷键WINCtrl F9MACOPTIOIN F9 1.2. 热加载范围 资源类型是否影响影响范围Java部分方法签名内...

计算机组成原理----指令系统课后习题

对应的知识点: 指令系统 扩展操作码的计算: 公式: 对扩展操作码而言,若地址长度为n,上一层留出m种状态,下一层可扩展出 mx2^n 种状态 1.设计某指令系统时,假设采用 16 位定长指令字格式&#…...

yolov8环境搭建+训练自己数据集

一、yolov8环境搭建 1. 安装miniconda环境 地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda 选择Python3.8版本 最好安装在C盘 勾选自动添加环境变量 ***以下操作安装过程中关闭代理软件 *** 2. 创建虚拟环境 conda create -n yolov8 python3…...

Eureka 学习笔记(1)

一 、contextInitialized() eureka-core里面,监听器的执行初始化的方法,是contextInitialized()方法,这个方法就是整个eureka-server启动初始化的一个入口。 Overridepublic void contextInitialized(ServletContextEvent event) {try {init…...

视觉新纪元:解码LED显示屏的视角、可视角、最佳视角的最终奥秘

在璀璨夺目的LED显示屏世界里,每一个绚烂画面的背后,都离不开三个关键概念:视角、可视角与最佳视角。这些术语不仅是衡量显示效果的重要标尺,也是连接观众与精彩内容的桥梁。让我们一起走进这场视觉盛宴,探索那些让LED…...

Benchmarking Panoptic Scene Graph Generation (PSG), ECCV‘22 场景图生成,利用PSG数据集

2080-ti显卡复现 源代码地址 Jingkang50/OpenPSG: Benchmarking Panoptic Scene Graph Generation (PSG), ECCV22 (github.com) 安装 pytorch 1.7版本 cuda10.1 按照readme的做法安装 我安装的过程如下图所示,这个截图是到了pip install openmim这一步 下一步 下一步 这一步…...

Linux 文件权限

优质博文:IT-BLOG-CN 一、使用者与群组的概念 【1】在Linux里面,任何一个文件都具有[User,Group及Other]三种身份的个别权限:不过需要注意的是root用户,具有所有权限。 ✔ User(文件拥有者):只有文件拥有者&#xf…...

IOS Swift 从入门到精通:算术运算,运算符重载,符合赋值运算,比较运算,条件,结合条件,三元运算,Swift语句,范围运算

目录 算术运算符 运算符重载 复合赋值运算符 比较运算符 条件 结合条件 三元运算符 Switch 语句 范围运算符 总结 算术运算符 现在您已经了解了 Swift 中的所有基本类型,我们可以开始使用运算符将它们组合在一起。运算符是那些像和 这样的小数学符号-&…...

Flutter开发环境搭建和调试

[你的Flutter文件夹路径]\flutter\bin 这样我们的Flutter SDK的环境变量就配置完毕了。接下来在命令提示符窗口中输入命令: flutter doctor 它可以帮助我们检查Flutter环境变量是否设置成功,Android SDK是否下载以及配置好环境变量等等。如果有相关的…...

【IC验证】UVM实验lab03

1. TLM端口的创建、例化与使用 创建: uvm_get_blocking_port #(fmt_trans) mon_bp_port; 例化: function new(string name "mcdf_refmod", uvm_component parent);super.new(name, parent);fmt_trans new("fmt_trans", this);…...

document.write()方法总结

document.write()方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!document.write()方法是JavaScript中用于向HTML文档写入内容的方法之一。它允许我们在…...

C#循环语句总结

前言 正所谓磨刀不误砍柴工,C#上位机软件开发能力的提升离不开对C#语法的精通,本文接着讲解C#语法知识中的循环语句,在C#程序开发中我们经常会用到各种循环语句,常见的有for循环、while循环,本文就是对C#中用到的各种…...

Spring-bean

Spring 网站:spring.io 两个方面: 简化开发: IoCAOP 框架整合: MyBatis SpringFrameWork系统架构(上层依赖下层) 解决问题(代码耦合度高——模块与模块之间的依赖程度) 目标&am…...

Linux常用命令(14)—查看文件内容(有相关截图)

写在前面: 最近在学习Linux命令,记录一下学习Linux常用命令的过程,方便以后复习。仅供参考,若有不当的地方,恳请指正。如果对你有帮助,欢迎点赞,关注,收藏,评论&#xf…...

【html】用html+css实现银行的账户信息表格

我们先来看一看某银行的账户信息表格 我们自己也可以实现类似的效果 效果图: 大家可以看到&#xff0c;其实效果差不多 接下来看看我们实现的代码 源码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"&…...

两种单例模式(保证线程安全)

开始前&#xff0c;球球各位读者给个三连吧&#xff0c;有错误感谢指出&#xff0c;谢谢 单例模式也叫单个实例&#xff0c;也就是这个类只有且只能有一个实例对象&#xff0c;这样一个类就叫做“单例”&#xff1b;单例模式有很多种&#xff0c;这里只介绍“饿汉模式”和“懒…...

开发 Golang 项目的 Docker 化案例

开发 Golang 项目的 Docker 化案例 在这个案例中&#xff0c;我们将展示如何使用 Docker 容器化一个简单的 Golang Web 应用。我们将创建一个基于 Go 的 Hello World 应用&#xff0c;并使用 Docker 和 Docker Compose 管理容器化环境。 1. 创建 Golang Web 应用 首先&#…...

PHP面试宝典之Laravel篇

Laravel简介 Laravel是一种优雅的PHP Web应用程序框架&#xff0c;它具有简洁、优雅的语法&#xff0c;并提供了强大的工具用于构建大型、健壮的应用程序。Laravel采用了现代PHP开发的最佳实践&#xff0c;因此深受开发者欢迎。 Laravel面试常见问题 1. 什么是Laravel中间件…...

自动驾驶仿真:Carsim转向传动比设置

文章目录 一、转向传动比概念二、设置转向传动比1、C factor概念2、Steer Kinematics概念3、传动比计算公式 三、转向传动比验证 一、转向传动比概念 转向传动比&#xff08;Steering Ratio&#xff09;表示方向盘转动角度与车轮转动角度之间的关系。公式如下&#xff1a; 转向…...

PyTorch nn.CrossEntropyLoss() 交叉熵损失函数详解和要点提醒

文章目录 前置知识nn.CrossEntropyLoss() 交叉熵损失参数数学公式带权重的公式&#xff08;weight&#xff09;标签平滑&#xff08;label_smoothing&#xff09; 要点 附录参考链接 前置知识 深度学习&#xff1a;关于损失函数的一些前置知识&#xff08;PyTorch Loss&#x…...

DW学习笔记|数学建模task2

本章主要涉及到的知识点有&#xff1a; 微分方程的解法如何用 Python 解微分方程偏微分方程及其求解方法微分方程的基本案例差分方程的求解数值计算方法元胞自动机 2.1 微分方程的理论基础 微分方程是什么&#xff1f;如果你参加过高考&#xff0c;可能在高三备考中遇到过这…...

【大数据 复习】第9章 数据仓库分析工具Hive

一、概念 1.概述 &#xff08;1&#xff09;Hive是一个构建于Hadoop顶层的数据仓库工具。 &#xff08;2&#xff09;某种程度上可以看作是用户编程接口&#xff0c;本身不存储和处理数据。 &#xff08;3&#xff09;依赖分布式文件系统HDFS存储数据。 &#xff08;4&#xf…...

ionic7 从安装 到 项目启动最后打包成 apk

报错处理 在打包的时候遇到过几个问题&#xff0c;这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 说明 由于之前使用的是 ionic 3&#xff0c;当时打包的…...

酒店网站建设策划方案/国内专业seo公司

观察者模式定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并自动更新。这一模式镇中关键对象是目标&#xff08;subject&#xff09;和观察者&#xff08;observer&#xff09;。一个目标可以有任意数目的依…...

政府门户网站改版升级建设方案/推广互联网推广

本文所指的开发工程师&#xff0c;仅指程序开发人员和以数字电路开发为主的电子工程师。当你选择计算机或者电子、自控等专业进入大学时&#xff0c;你本来还是有机会从事其它行 业的&#xff0c;可你毕业时执迷不悟&#xff0c;仍然选择了开发做为你的职业&#xff0c;真是自做…...

搞个竞拍网站怎么做/百度互联网营销是什么

有的时候经常需要在页面的底部做一个悬浮框&#xff0c;进行电话咨询什么&#xff0c;留电什么的&#xff0c;但是发现在手机百度浏览器中&#xff0c;进去页面一会就消失了。 这个是因为&#xff0c;百度浏览器把他看成广告了&#xff0c;自动屏蔽了。 对于使用 display:fixed…...

摄影作品共享网站开发背景/如何让自己的网站排名靠前

学习计划 失业在家抠脚到华为年薪25w测试工程师&#xff0c;我只花了2个月~ 底层逻辑 如果要进大厂&#xff0c;算法、底层、项目经验都要刷&#xff0c;小编以后会给大家更新各种面试题…… 如果要进大厂&#xff0c;项目经验、底层算法、网络、数据机构等都要狂刷…… …...

网站建设 小程序开发/福州seo外包公司

年会是遇到抽奖环节如何制作ppt呢&#xff0c;这里有个解决方法&#xff0c;提供参考。步骤就是这样&#xff1a;1、新建ppt.2、添加一个命令控件和一个标签控件&#xff08;开发工具---控件---命令控件&标签控件&#xff09;3、点击“命令按钮CommandButton1”右击鼠标&am…...

内蒙古建设厅门户网站/关键字排名优化工具

Aware XXXAware在Spring里表示对XXX可以感知&#xff0c;通俗点解释就是&#xff1a;如果在某个类里边想要使用spring的一些东西&#xff0c;就可以通过实现XXXAware接口告诉Spring&#xff0c; Spring看到后就会给你送过来&#xff0c;而接收的方式是通过实现接口唯一的方法se…...