STM32——BKP备份寄存器RTC实时时钟

news2024/9/24 5:24:52

首先是理论知识Unix时间戳:

时间戳只显示秒,没有进位,永不进位的秒计数器,60秒就是60秒,100秒就是100秒,它可以和年月日/时分秒进行转换

优点:1、简化硬件电路(只需要考虑秒的容量,不需要考虑其他年月日时分等的数值)

2、时间间隔计算方便,例如:1月1日8点到3月1日18点之间经过了多少个小时,使用时间戳就直接两个秒数相减/60即可

3、存储方便,只有一个变量

缺点:占用软件资源,在秒转化为其他形式如:年月日时分时就需要进行一系列转换操作

32位有符号的时间戳会在2038年1月19日溢出,32位无符号则是在2106年溢出

时间标准:从GMT(与地球实际自转时间有关,不固定)到UTC

闰秒:1分钟可能出现61秒的情况,可能会出现23:59:60

以下是时间戳和其他的转换,第2、3、4最重要

其中mktime是依据当地时间进行转换秒数

time_t是64位的int类型;

最后一个参数表示是否使用夏令时

调用localtime函数显示时间的年月日时分秒和星期

之后是BKP和RTC的理论知识

1、BKP

当VDD掉电时,由VBAT供电,此时数据仍然存在,如果VBAT也掉电,此时数据消失。

VDD供电时,VBAT不供电

本节使用的是C8T6因此使用20字节的BKP

侵入检测:当TAMPER为上升沿/下降沿时,BKP的数据寄存器里边数据全部清空,以保证安全

2、RTC

HSE/128,为保证最后等得到1Hz,先分频,之后再适当分频即可得到,RTC备选时钟;

一般选用LSE振荡器时钟,因为它存在自然溢出,32.768KHz表示2^15次,当计数值到32767时再计一位就会溢出,此时刚好就是1Hz,不需要再设置什么计数目标值;只有这一路可以用VBAT供电;

LSI一般是RTC的备选方案,它一般用于看门狗;

以下是硬件电路设计:

灰色部分表示VDD掉电后,备用供电还可运行

当RTCCLK时钟信号来临,由于32.768KHz过大,因此需要先进行分频操作。DIV属于自减计数器,当计数值为32767时,来一个时钟信号,减1,直到为0后再输入一个就会溢出并产生溢出信号重新回到32767,分频输出的频率为1Hz,提供给后续秒计数器。

当CNT=ALR就会产生一个RTC闹钟信号引发中断,并唤醒待机模式(或者WKUP唤醒闹钟) 

需要配置数据选择器选择哪一个为时钟来源、配置重装寄存器选择分频系数、配置32位计数器得到日期等的书写

可以不用ALR;

在代码方面,使用BKP和RTC时需要注意:

1、开启PWR和BKP的时钟;之后将PWR的DBP开启使能,对BKP和RTC访问

2、当APB1刚开启时,需要等待RTC_CRL时钟的RSF位置1(RTC_CRL来一个上升沿,此时RTC将值同步到总线上),这表明此时有数计入,不然直接读取可能为0还未读入

代码部分:定义变量

1、由于BKP代码少,直接在main函数进行编辑:

进行实验:

1、写入数据之后,复位数据依然没有变化,不为0

2、主电源拔下又插入,数据依然没有变化,由备用电源供电

3、备用电源拔掉,主电源重新拔掉又插上

此时BKP数据清零

2、RTC实时时钟

需要对RTC进行封装:开启PWR和BKP时钟,并对pwr开启使能——开启LSE时钟——配置RTCCLK的时钟数据选择器——调用等待函数(等待数据同步、上一次操作完成)——配置预分频器(确保输出1Hz)——配置CNT值,给RTC初始时间——中断(需要配置,不需要不用)

当BKP的数据不清零时,表示主电源掉电但是备用电源依然有;

如果BKP存储的数据清零,则表示主电源和备用电源都掉电,此时则整体数据重置。

当BKP的标志位是0xA5A5(随意写入,除0x00),则表明RTC初始化过,且备用电源没断电,则不需要再初始化:

自定义时间:注意不要在数字前补0,在C语言中前有0默认为8进制,当写入09时就会报错:

转换日期为秒数等函数,调用time.h

将数组自定义填充时间放到struct tm中——使用mktime得到秒数——将秒数写到CNT中

之后是将秒数转换为日期等:

在main函数直接显示:

DIV是自减寄存器,如果想让它的取值在0-999

实验结果:

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

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

相关文章

C语言 猜数字游戏

目录 1. 随机数⽣成 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的范围 2. 猜数字游戏实现 游戏要求: 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对&a…

运行微信小程序报错:Bad attr data-event-opts with message

问题 使用uniapp 编译,运行微信小程序环境时,报错 Bad attr data-event-opts with message。(这个错误报错原因很多,这里只解决一个) 原因 原因是:代码中有: :key"swiperList i"…

猫头虎分享:Python库 Pip 的简介、安装、用法详解入门教程

猫头虎分享:Python库 Pip 的简介、安装、用法详解入门教程 🎯 大家好!今天猫头虎带您一起探索Python世界中的一个基础工具——Pip。作为一名Python开发者,掌握Pip的使用不仅能帮助你更有效地管理项目中的依赖,还能让你…

【Java】Spring Boot使用 Email 传邮件 (上手图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 认识依赖4.2 发送邮件步骤4.2.1 先获取授权码4.2.1 邮件配置4.2.2 主体内容…

使用 jar-analyzer 和dbeaver 分析java

https://github.com/jar-analyzer/jar-analyzer 可以进行jar分析,包括method调用 分析完可以通过界面进行一些分析,如果复杂还可以用DbWeaver 打开数据库进行分析

Java SpringBoot+Vue实战教程:如何搭建高中素质评价档案系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【通俗易懂】限流、降级、熔断有什么区别?

目录 一、限流 1.1 简介 1.2 限流算法 二、降级 2.1 简介 2.2 降级的方式 延迟服务 在粒度范围内关闭服务(片段降级或服务功能降级) 页面异步请求降级 写降级 读降级 2.3 降级的介入方式 自动开关降级 服务超时 失败次数 发生故障 限流…

Markdown 美化 Github 个人主页

注:本文参考这篇博客 http://t.csdnimg.cn/KXhSw 目录 1 效果展示2 创建仓库3 编写 Markdown3.1 动态波浪图3.2 打字机动图3.3 技术栈图标3.4 项目贡献统计3.5 连续贡献统计3.6 贡献统计图3.7 代码时长统计3.8 仓库代码占比 1 效果展示 先来看看效果: 动…

java整合DL645-2007与Dl645-1997

注意事项: 前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,有些没有FE的,也有4个FE的,所以对于接受程序,一定要慎重传输次序-所有的数据项都是先传低字节,…

【生日视频制作】云层直升机飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】

云层直升飞机生日视频制作教程AE模板修改文字特效软件生成器玩法素 怎么如何做的【生日视频制作】云层直升机飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

web后端(javaEE)开发——servlet

目录 一、web后端开发概述 二、web后端开发环境搭建 1.安装服务器软件 2.安装JDK 三、创建web后端项目 1.创建项目 2.修改设置 3.*在IDEA中集成Tomcat* 四、Servlet创建和应用 1.概述 2.Servlet程序创建与配置 3.分析Servlet程序结构 一、web后端开发概述 web开发&a…

Netty代码阅读

阅读Netty官方文档的时候,提到了Netty主要有三大核心,分别是buffer、channel、Event Model,接下来我们就从阅读Netty代码来理解这三大核心。 示例程序 先给出示例程序,方便自己也方便读者进行debug调试。 Server端代码 # Serv…

mysql启动报错“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”

我删除(手动删除)完 binlog 文件后,重新启动mysql服务报错如下: 查看错误日志可以看到 某个 binlog 文件找不到 打开 binlog.index 可以看到里面引用的正是这个文件 解决方法: 要么手动修改 binlog.index 文件&#…

【C++ Primer Plus习题】4.6

问题: 解答: #include <iostream> using namespace std;typedef struct _CandyBar {string brand;float weight;int calorie; }CandyBar;int main() {CandyBar snack[3] { {"德芙",2.1,20},{"箭牌",2.2,16},{"阿尔卑斯",2.3,18}};for (i…

【GNSS接收机】开源导航接收机

Pocket SDR Pocket SDR是一款基于软件无线电&#xff08;SDR&#xff09;技术的开源GNSS&#xff08;全球导航卫星系统&#xff09;接收机。它由名为“Pocket SDR FE”的RF前端设备、设备的一些实用程序以及用Python、C和C编写的GNSS-SDR AP&#xff08;应用程序&#xff09;组…

linux死锁问题和cpu使用率过高问题排查

1、问题共同点 死锁问题和cpu使用率过高都是需要我们找出对应的问题线程。 死锁问题需要我们找出哪两个线程出现了死锁情况。 cpu使用率过高需要我们找出哪个或哪些线程占用了大量的cpu。 2、命令排查 2.1、查看机器上的Java进程 jcmd或 jps2.2、查看对应Java进程的线程级别…

全文发布|SmartX 金融行业跑批类业务场景探索与实践合集

经过多年在⾦融⾏业的积累和发展&#xff0c;SmartX 已经赢得了 300 多家⾦融⽤户的信任。覆盖了银⾏、保险、证券、基⾦、期货和信托等主要⾦融细分领域。在这个过程中&#xff0c;我们从最初的单⼀超融合⼚商&#xff08;⼩规模起步/快速交付/按需灵活扩容/降低总拥有成本&am…

【Hot100】LeetCode—236. 二叉树的最近公共祖先

目录 1- 思路递归 自底向上 2- 实现⭐236. 二叉树的最近公共祖先——题解思路 3- ACM 实现 题目连接&#xff1a;236. 二叉树的最近公共祖先 1- 思路 递归 自底向上 ① 自底向上的逻辑的话 需要采用后续遍历的方式&#xff0c;最后处理中间结点 ② 递归 2.1 参数和返回值…

Verilog刷题笔记60

题目&#xff1a; Exams/2013 q2bfsm Consider a finite state machine that is used to control some type of motor. The FSM has inputs x and y, which come from the motor, and produces outputs f and g, which control the motor. There is also a clock input called …

openGL文本渲染FreeType常见问题

这里写自定义目录标题 源码下载及编译编译生成的dll及lib使用FreeTypeinclude头文件加载附加包含目录 lib文件加载添加lib文件位置添加lib文件下的lib名 字体使用代码编写代码初始化中文字体输出简单封装 存在问题列表问题1&#xff1a;无法打开stddef.h其他问题后续更新 源码下…