STM32F1学习——BKP备份寄存器和RTC实时时钟

一、RTC实时时钟

        在使用RTC实时时钟时,我们需要理解一下Unix时间戳相关的内容。Unix定义为从UTC/GMT的1970年1月1日的0时0分0秒开始所经过的秒数,不考虑润秒。

        时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量,世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地的时间。

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

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

        这里我们用代码和框图看看time.h库的相关内容。

#include<time.h>
#include<stdio.h>// 如果你转到定义你就可以看到 , typedef __time64_t time_t; 
time_t time_now;// 如果你转到定义你就可以看到 tm 这个结构体的详细形式
// struct tm {
//     int tm_sec;
//     int tm_min;
//     int tm_hour;
//     int tm_mday;
//     int tm_mon;
//     int tm_year;
//     int tm_wday;
//     int tm_yday;
//     int tm_isdst;
//   };
struct tm time_struct;char string1[50];int main()
{time_now = time(&time_now); //int64printf("time_now = %lld \n" , time_now);// printf("time = %s" , ctime(&time_now));time_struct = *gmtime(&time_now);   //转化为格林尼治时间,比中国的的时间早了8小时,你可以全部打印出来看看printf("time_struct.tm_hour = %d \n" , time_struct.tm_hour);time_struct = *localtime(&time_now);   //转化为当地时间printf("time_struct.tm_hour = %d \n" , time_struct.tm_hour);printf("mktime = %lld \n" , mktime(&time_struct));  //用当地时间转化为1900 1 1 0 0 0 到现在的秒数printf("ctime = %s \n" , ctime(&time_now)); //秒计数器转化为字符串printf("asctime = %s \n" , asctime(&time_struct)); // 日期时间转化为字符串strftime(string1 , 50 , "%Y - %m - %d \n" , &time_struct);  //将日期时间转化为自定义格式,下面有自定义格式printf(string1);return 0;
}// %Y:四位年份(例如:2023)
// %m:月份(01 到 12)
// %d:日期(01 到 31)
// %H:小时(00 到 23)
// %M:分钟(00 到 59)
// %S:秒(00 到 59)
// %A:星期几的完整名称(例如:Monday)
// %a:星期几的缩写(例如:Mon)
// %B:月份的完整名称(例如:January)
// %b:月份的缩写(例如:Jan)

二、BKP——Backup Registers备份寄存器

        BKP可用于存储数据,但数据的容量不大,STM32F103C8T6仅有20字节(中容量和小容量) / 84字节(大容量和互联型)。BKP在VCC被切断的时候仍然可以有VBAT(1.8~3.6V)维持供电。即使系统复位或电源复位时他们也不会复位。

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

        同时他还肩具两个RTC的功能①输出RTC校准时钟 ②RTC闹钟脉冲或者秒脉冲。

        下图是BKP的基本框图,图中橙色部分是后背区域,掉电后可由VBAT后备电池供电。

三、RTC——Real Time Clock实时时钟

a、RTC简介

        RTC是一个独立的定时器,可以为系统提供时钟和日历功能,RTC和时钟配置系统位于后背区域,系统复位时数据不清零,即使主电源掉电了也可以使用VBAT(1.8~3.6V)引脚供电。

        由第一节中 time_t 的数据类型来看,这里存储的是一个由1970年1月1日0时0分0秒到现在时间的一个秒数,所以应该是一个很大的数。RTC有一个32位的可编程计数器,可以对应Unix时间戳的秒计数器。

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

        RTC时钟源的选择有三个:①HSE时钟 / 128 (通常为8MHZ / 128)        

②LSE振荡器时钟(通常为32.768KHZ)        ③LSI振荡器时钟(40KHZ)

b、RTC的硬件电路图和程序框图

        RTC的硬件电路图先观察灰色部分的最左边有着RTCCLK选择RTC时钟,经过下面这个20位的可编程预分频器(RTC_DIV是自减计数器)后进入32位的可编程计数器,①RTC_Second是RTC每增加一秒的线路他们可以去到NVIC发起中断。②RTC_Overflow是溢出标志位,即32位数溢出,但这应该是最早2038年的事情,但STM32是无符号数所以应该是2106年。③RTC_Alarm是闹钟功能,但这个Alarm是一个定值只能响一次,如果要周期性响就需要再每次Alarm信号产生时改变RTC_ALR的值。 注意RTC_CR中F结尾的位是标志位,IE结尾的是使能。

        最上面RTC是APB1总线上的设备。

        最下面还有一个WKUP引脚用于唤醒设备。

c、RTC操作注意事项

        在访问BKP和RTC之前需要以下两步:

①设置RCC_APB1ENR的PWREN和BKPEN,使能PWR和BKP时钟。

②设置PWR_CR的DBP,使能对BKP和RTC的访问。

        若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1。(这是因为RTC的时钟是RTCCLK低速时钟,而APB1总线是PCLK1时钟。当我们用PCLK1驱动的设备读取RTCCLK驱动的设备时会有时钟不同步的问题,RTCCLK只有在上升沿才会更新数据。若我第一个时钟还没来,RTC寄存器的数据还没更新到APB1总线上,则读取会失败。)

        必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器。

        对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器。(这个也是因为两个时钟频率不对等的原因)

参考

[12-1] Unix时间戳_哔哩哔哩_bilibili

[12-2] BKP备份寄存器&RTC实时时钟_哔哩哔哩_bilibili

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

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

相关文章

【Python爬虫(26)】Python爬虫进阶:数据清洗与预处理的魔法秘籍

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

Java集合框架之List接口详解

目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…

嵌入式八股文(四)计算机网络篇

第一章 基础概念 1. 服务 指网络中各层为紧邻的上层提供的功能调用,是垂直的。包括面向连接服务、无连接服务、可靠服务、不可靠服务。 2. 协议 是计算机⽹络相互通信的对等层实体之间交换信息时必须遵守的规则或约定的集合。⽹络协议的三个基本要素:语法、…

SpringBoot+Vue+Mysql苍穹外卖

一.项目介绍 1.项目内容 苍穹外卖是一款为大学学子设计的校园外卖服务软件&#xff0c;旨在提供便捷的食堂外卖送至宿舍的服务。该软件包含系统管理后台和用户端&#xff08;微信小程序&#xff09;两部分&#xff0c;支持在线浏览菜品、添加购物车、下单等功能&#xff0c;并…

【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)

文章目录 第四章 创建型模式4.2 工厂方法模式4.2.1 需求: 模拟发放奖品业务4.2.2 原始开发方式4.2.3 简单工厂模式4.2.3.1 简单工厂模式介绍4.2.3.2 简单工厂原理4.2.3.3 简单工厂模式重构代码4.2.3.4 简单工厂模式总结 4.2.4 工厂方法模式4.2.4.1 工厂方法模式介绍4.2.4.2 工厂…

【C语言】指针(5)

前言&#xff1a;上篇文章的末尾我们使用了转移表来解决代码冗余的问题&#xff0c;那我们还有没有什么办法解决代码冗余呢&#xff1f;有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一&#xff0c;回调函数二&#xff0c;qsort实现快速排序1…

SpringBoot:SSL证书部署+SpringBoot实现HTTPS安全访问

一、前言 SSL协议介于TCP/IP协议栈的第四层&#xff08;传输层&#xff09;和第七层&#xff08;应用层&#xff09;之间&#xff0c;为基于TCP的应用层协议&#xff08;如HTTP&#xff09;提供安全连接。它通过在客户端和服务器之间建立一个加密的通道&#xff0c;确保数据在传…

嵌入式 lwip http server makefsdata

背景&#xff1a; 基于君正X2000 MCU Freertoslwip架构 实现HTTP server服务&#xff0c;MCU作为HTTP服务器通过网口进行数据包的传输&#xff0c;提供网页服务。其中设计到LWIP提供的工具makefsdata&#xff0c;常用于将文件或目录结构转换为适合嵌入到固件中的二进制格式。 …

论文笔记-WSDM2025-ColdLLM

论文笔记-WSDM2025-Large Language Model Simulator for Cold-Start Recommendation ColdLLM&#xff1a;用于冷启动推荐的大语言模型模拟器摘要1.引言2.前言3.方法3.1整体框架3.1.1行为模拟3.1.2嵌入优化 3.2耦合漏斗ColdLLM3.2.1过滤模拟3.2.2精炼模拟 3.3模拟器训练3.3.1LLM…

《DeepSeek-V3:人工智能大语言模型》

《DeepSeek-V3:人工智能大语言模型》 1. 引言 我们介绍了 DeepSeek-V3,这是一个强大的专家混合 (MoE) 语言模型,总共有 671B 个参数,每个令牌激活了 37B。 为了实现高效的推理和具有成本效益的训练,DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 DeepSeekMoE 架构,这些…

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备&#xff0c;该软件除了能通过电脑远程关闭另一台电脑外&#xff0c;您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机&#xff1a; 步骤1.在手机应用商店搜索“远程看看”进行软件安装&#xff0c;…

Aseprite绘画流程案例(1)——画相机图标

原图&#xff1a; 步骤一&#xff1a;打开需要参照的图标 步骤二&#xff1a;将参照的图片拖放到右边&#xff0c;作为参考 步骤三&#xff1a;新建24x24的画布&#xff0c;背景为白色的画布 步骤四&#xff1a;点击菜单栏——视图——显示——像素网格&#xff08;如果画布已经…

The Heliosphere 日球层

转自 The Heliosphere - NASA This is an artists concept of our Heliosphere as it travels through our galaxy with the major features labeled. Termination Shock: Blowing outward billions of kilometers from the Sun is the solar wind, a thin stream of electrica…

使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

vsan数据恢复—vsan缓存盘故障导致虚拟磁盘文件丢失的数据恢复案例

vsan数据恢复环境&故障&#xff1a; VMware vsan架构采用21模式。每台设备只有一个磁盘组&#xff08;71&#xff09;&#xff0c;缓存盘的大小为240GB&#xff0c;容量盘的大小为1.2TB。 由于其中一台主机&#xff08;0号组设备&#xff09;的缓存盘出现故障&#xff0c;导…

匹配算法:向下就近原则,向下没有就向上

匹配算法&#xff1a;向下就近原则&#xff0c;向下没有就向上 实现方式一实现方式二总结 实现方式一 private static List<Integer> findMatches(List<Integer> sourceList, List<Integer> searchValues) {List<Integer> sortedList sourceList.stre…

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)

1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制&#xff0c;显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术&#xff08;Quantization&#xff09;以降低模型的计算复杂度和存储需求&#xff0c;同时结合张量并行计算&…

Python VsCode DeepSeek接入

Python VsCode DeepSeek接入 创建API key 首先进入DeepSeek官网&#xff0c;https://www.deepseek.com/ 点击左侧“API Keys”&#xff0c;创建API key&#xff0c;输出名称为“AI” 点击“创建"&#xff0c;将API key保存&#xff0c;复制在其它地方。 在VsCode中下载…

【python】网页批量转PDF

安装wkhtmltopdf 网站&#xff1a;wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安装pdfkit库 pip install pdfkit 批量转换代码 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…

架构师面试(三):订阅模型

问题 对【注册中心】【配置中心】【消息队列】和【IM】进行分析和抽象&#xff0c;可归纳出一个完整的业务模型单元&#xff0c;即【订阅系统】&#xff0c;下面关于实现订阅系统的几种模型的相关描述中&#xff0c;说法正确的有哪几项&#xff1f; A. 信箱模型&#xff0c;即…