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

RTC实时时钟

一、Unix时间戳

1、Unix 时间戳

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

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

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

2、UTC/GMT

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

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

3、时间戳转换

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

二、BKP简介

1、BKP(Backup Registers)备份寄存器

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

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

(3)RTC引脚输出RTC校准时钟RTC闹钟脉冲或者秒脉冲

(4)存储RTC时钟校准寄存器

(5)用户数据存储容量:     

                  20字节(中容量和小容量)/ 84字节(大容量和互联型)

2、BKP基本结构

三、RTC简介

1、RTC(Real Time Clock)实时时钟

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

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

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

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

(5)可选择三种RTC时钟源:     

                HSE时钟除以128(通常为8MHz/128)     

                LSE振荡器时钟(通常为32.768KHz)2^15=32768     

                LSI振荡器时钟40KHz

2、RTC框图

3、RTC基本结构

4、硬件电路

5、RTC操作注意事项

(1)执行以下操作将使能对BKP和RTC的访问:     

                设置RCC_APB1ENRPWRENBKPEN使能PWR和BKP时钟     

                设置PWR_CRDBP使能对BKP和RTC的访问

(2)若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1

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

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

四、读写备份寄存器

1、按照以下接线方式连接,并将STLINK插到电脑上

2、BKP函数驱动模块

(1)BKP库函数的功能

(2)PWR库函数的功能

3、 mian.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "button.h"uint8_t KeyNum;uint16_t ArrayWrite[] ={0x1234,0x5678};
uint16_t ArrayRead[2];int main(void)
{OLED_Init();Button_Init();OLED_ShowString(1,1,"W:");OLED_ShowString(2,1,"R:");RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);	//BKP初始化,使能PWR和BKP时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);PWR_BackupAccessCmd(ENABLE);//对BKP的访问while(1){KeyNum = Button_GetNum();if(KeyNum == 1){ArrayWrite[0]++;ArrayWrite[1]++;BKP_WriteBackupRegister(BKP_DR1,ArrayWrite[0]);	//写BKP寄存器BKP_WriteBackupRegister(BKP_DR2,ArrayWrite[1]);OLED_ShowHexNum(1,3,ArrayWrite[0],4);OLED_ShowHexNum(1,8,ArrayWrite[1],4);}ArrayRead[0] = BKP_ReadBackupRegister(BKP_DR1);		//读BKP寄存器ArrayRead[1] = BKP_ReadBackupRegister(BKP_DR2);OLED_ShowHexNum(2,3,ArrayRead[0],4);OLED_ShowHexNum(2,8,ArrayRead[1],4);}   
}

4、实现效果

读写备份寄存器

掉电不丢失

五、实时时钟

1、按照以下接线方式连接,并将STLINK插到电脑上

2、RTC函数驱动模块

(1)RCC库函数的功能

(2)RTC库函数的功能

(3)MyRTC.c

#include "stm32f10x.h"                  // Device header
#include <time.h>uint16_t MyRTC_Time[] = {2023,1,1,23,59,55};void MyRTC_SetTime(void);void MyRTC_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);	//开启PWR和BKP时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);PWR_BackupAccessCmd(ENABLE);						//使能BKP和RTC访问if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)//避免时间重置,只有在备用电源也掉电的时候时间才重置{RCC_LSEConfig(RCC_LSE_ON);//启动外部LSE晶振while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET);//等待LSE启动完成RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//选择RTCCLK时钟源:LSE时钟RCC_RTCCLKCmd(ENABLE);//使能一下时钟RTC_WaitForSynchro();//等待同步RTC_WaitForLastTask();//等待上一次操作完成RTC_SetPrescaler(32768 - 1);//设置预分频器,1HzRTC_WaitForLastTask();//等待上一次操作完成MyRTC_SetTime();BKP_WriteBackupRegister(BKP_DR1,0xA5A5);}	else{RTC_WaitForSynchro();//等待同步RTC_WaitForLastTask();//等待上一次操作完成}
}/*设置时间
*/
void MyRTC_SetTime(void)
{time_t time_cnt;struct tm time_date;time_date.tm_year = MyRTC_Time[0] - 1900;time_date.tm_mon  = MyRTC_Time[1] - 1;time_date.tm_mday = MyRTC_Time[2];time_date.tm_hour = MyRTC_Time[3];time_date.tm_min  = MyRTC_Time[4];time_date.tm_sec  = MyRTC_Time[5];time_cnt = mktime(&time_date) - 8*60*60;RTC_SetCounter(time_cnt);RTC_WaitForLastTask();//等待上一次操作完成
}/*读取时间
*/
void MyRTC_ReadTime(void)
{time_t time_cnt;struct tm time_date;time_cnt = RTC_GetCounter() +8*60*60;//获取计数器的值time_date = *localtime(&time_cnt);MyRTC_Time[0]=time_date.tm_year + 1900;MyRTC_Time[1]=time_date.tm_mon +1;MyRTC_Time[2]=time_date.tm_mday;MyRTC_Time[3]=time_date.tm_hour;MyRTC_Time[4]=time_date.tm_min;MyRTC_Time[5]=time_date.tm_sec;
}

(4)MyRTC.h

#ifndef __MYRTC_H
#define __MYRTC_Hextern uint16_t MyRTC_Time[];void MyRTC_Init(void);
void MyRTC_SetTime(void);
void MyRTC_ReadTime(void);#endif

3、编写main.c代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyRTC.h"int main(void)
{OLED_Init();MyRTC_Init();OLED_ShowString(1,1,"Date:XXXX-XX-XX");OLED_ShowString(2,1,"Time:XX:XX:XX");OLED_ShowString(3,1,"CNT :");OLED_ShowString(4,1,"DIV :");while(1){MyRTC_ReadTime();OLED_ShowNum(1,6,MyRTC_Time[0],4);OLED_ShowNum(1,11,MyRTC_Time[1],2);OLED_ShowNum(1,14,MyRTC_Time[2],2);OLED_ShowNum(2,6,MyRTC_Time[3],2);OLED_ShowNum(2,9,MyRTC_Time[4],2);OLED_ShowNum(2,12,MyRTC_Time[5],2);OLED_ShowNum(3,6,RTC_GetCounter(),10);OLED_ShowNum(4,6,RTC_GetDivider(),10);//余数寄存器,自减32767~0}
}

4、实现效果

实时时钟

掉电不丢失

相关文章:

RTC实时时钟

一、Unix时间戳 1、Unix 时间戳 &#xff08;1&#xff09;Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 &#xff08;2&#xff09;时间戳存储在一个秒计数器中&#xff0c;秒计数器为…...

WHAT - React 学习系列(一)

官方文档 If you have a lot of HTML to port to JSX, you can use an online converter. You’ll get two things from useState: the current state (count), and the function that lets you update it (setCount). To “remember” things, components use state.To mak…...

代理模式(静态代理/动态代理)

代理模式&#xff08;Proxy Pattern&#xff09; 一 定义 为其他对象提供一种代理&#xff0c;以控制对这个对象的访问。 代理对象在客户端和目标对象之间起到了中介作用&#xff0c;起到保护或增强目标对象的作用。 属于结构型设计模式。 代理模式分为静态代理和动态代理。…...

Word2Vec基本实践

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…...

IIS配置網站登錄驗證,禁止匿名登陸

需要維護一個以前的舊系統&#xff0c;這個系統在內網運行&#xff0c;需要抓取電腦的登陸賬號&#xff0c;作為權限管理的一部分因此需要在IIS配置一下...

抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号

目录 前言&#xff1a; 一、抖音矩阵系统有哪些功能&#xff1f; 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布&#xff0c;智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题&#xff1f; 总结&#xff…...

山东大学软件学院创新项目实训开发日志——收尾篇

山东大学软件学院创新项目实训开发日志——收尾篇 项目名称&#xff1a;ModuFusion Visionary&#xff1a;实现跨模态文本与视觉的相关推荐 -------项目目标&#xff1a; 本项目旨在开发一款跨模态交互式应用&#xff0c;用户可以上传图片或视频&#xff0c;并使用文本、点、…...

vue2.7支持组合式API,但是对应的vue-router3并不支持useRoute、useRouter。

最近在做一个项目&#xff0c;因为目标用户浏览器版本并不确定&#xff0c;可能会有较旧版本&#xff0c;于是采用vue2.7而不是vue3&#xff0c;最近一年多使用vue3开发的项目都碰到了很多chrome 63-73版本&#xff0c;而对应UI 库 element plus又问题很多。 为了不碰到这些问…...

摊位纠纷演变肢体冲突,倒赔了500:残疾夫妇与摊主谁之过?

在一个小商贩密集的街区&#xff0c;一起由摊位纠纷引发的肢体冲突事件在当地社区和网络上引起了热议。涉事双方为一名摊主和一对残疾夫妇&#xff0c;他们的争执源自对一个摊位的使用权。本是口头上的争吵&#xff0c;却由于双方情绪激动&#xff0c;迅速升级为肢体冲突&#…...

深入理解和实现Windows进程间通信(消息队列)

常见的进程间通信方法 常见的进程间通信方法有&#xff1a; 管道&#xff08;Pipe&#xff09;消息队列共享内存信号量套接字 下面&#xff0c;我们将详细介绍消息队列的原理以及具体实现。 什么是消息队列&#xff1f; Windows操作系统使用消息机制来促进应用程序与操作系…...

Web网页前端教程免费:引领您踏入编程的奇幻世界

Web网页前端教程免费&#xff1a;引领您踏入编程的奇幻世界 在当今数字化时代&#xff0c;Web前端技术已成为互联网发展的重要驱动力。想要踏入这一领域&#xff0c;掌握相关技能&#xff0c;却苦于找不到合适的教程&#xff1f;别担心&#xff0c;本文将为您带来一份免费的We…...

北斗短报文终端在应急消防通信场景中的应用

在应对自然灾害和紧急情况时&#xff0c;北斗三号短报文终端以其全球覆盖、实时通信和精准定位的能力&#xff0c;成为应急消防通信的得力助手。它不仅能够在地面通信中断的极端条件下保障信息传递的畅通&#xff0c;还能提供精准的位置信息&#xff0c;为救援行动提供有力支持…...

Java跳动爱心代码

1.计算爱心曲线上的点的公式 计算爱心曲线上的点的公式通常基于参数方程。以下是两种常见的参数方程表示方法&#xff0c;用于绘制爱心曲线&#xff1a; 1.1基于 (x, y) 坐标的参数方程 x a * (2 * cos(θ) - sin(θ))^3 y a * (2 * sin(θ) - cos(θ))^3 其中&#xff…...

Swift Combine — Operators(常用Filtering类操作符介绍)

目录 filter(_: )tryFilter(_: )compactMap(_: )tryCompactMap(_: )removeDuplicates()first(where:)last(where:) Combine中对 Publisher的值进行操作的方法称为 Operator&#xff08;操作符&#xff09;。 Combine中的 Operator通常会生成一个 Publisher&#xff0c;该 …...

Windows11+CUDA12.0+RTX4090如何配置安装Tensorflow2-GPU环境?

1 引言 电脑配置 Windows 11 cuda 12.0 RTX4090 由于tensorflow2官网已经不支持cuda11以上的版本了&#xff0c;配置cuda和tensorflow可以通过以下步骤配置实现。 2 步骤 &#xff08;1&#xff09;创建conda环境并安装cuda和cudnn&#xff0c;以及安装tensorflow2.10 con…...

韩顺平0基础学Java——第27天

p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet&#xff1a;//GPT教的 Map 和 Entry 的关系 1.Map 接口&#xff1a;它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口&#xff1a;Entry 是 Map 接口的一个嵌…...

YesPMP探索Python在生活中的应用,助力提升开发效率

Python是一种简单易学、高效强大的编程语言&#xff0c;正变成越来越多人选择的热门技能。学习Python不仅可以提供更多就业机会&#xff0c;还能让自己在职场更加有竞争力&#xff0c;那可以去哪里拓展自己的技能呢&#xff1f; YesPMP平台 为熟练掌握Python语言的程序员提供了…...

TikTok账号运营:静态住宅IP为什么可以防封?

静态住宅IP代理服务是一种提供稳定、静态IP地址并可隐藏用户真实IP地址的网络代理服务。此类代理服务通常使用高速光纤网络来提供稳定、高速的互联网体验。与动态IP代理相比&#xff0c;静态住宅IP代理的IP地址更稳定&#xff0c;被封的可能性更小&#xff0c;因此更受用户欢迎…...

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本

目录 简介 上传过程 修复上传漏洞 tmp文件夹总是被上传病毒文件如下图: 简介 服务器时不时的会发送短信说你服务器有病毒, 找到了这个tmp文件, 删除了之后又有了。 确实是有很多人就这么无聊, 每天都攻击你的服务器。 找了很久的原因, 网上也提供了一大堆方法,…...

HTML+CSS+PHP实现网页留言板功能(需要创建数据库)

话说前头&#xff0c;我这方面很菜滴。这是我网页作业的一部分。 1.body部分效果展示&#xff08;不包括footer&#xff09; 2、代码 2.1 leaving.php&#xff08;看到的网页&#xff09; <!DOCTYPE html> <html lang"en"> <head> <met…...

【谷歌】实用的搜索技巧

1、使用正确的谷歌网址 我们知道https://www.google.com是谷歌的网址。但根据国家,用户可能会被重定向到 google.fr(法国)或google.co.in(印度)。 最主要的URL——google.com是为美国用户准备的(或是针对全世界所有用户的唯一URL))。当你在谷歌上搜索时,了解这一点是相…...

打造完美启动页:关键策略与设计技巧

启动页&#xff08;Splash Screen&#xff09;设计是指在应用程序启动时&#xff0c;首先展示给用户的界面设计。这个界面通常在应用加载或初始化期间显示&#xff0c;其主要目的是为用户提供一个视觉缓冲&#xff0c;展示品牌标识&#xff0c;并减少用户在等待过程中的焦虑感。…...

电子书(chm)-加载JS--CS上线

免责声明: 本文仅做技术交流与学习... 目录 cs--web投递 html(js)代码 html生成chm工具--EasyCHM 1-选择powershell 模式 生成 2-选择bitsadmin模式生成 chm反编译成html cs--web投递 cs配置监听器--->攻击---->web投递---> 端口选择没占用的, URL路径到时候会在…...

理解HTTP请求格式

HTTP概念 HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff1b;HTTP是一个客户端&#xff08;用户&#xff09;和服务端&#xff08;网站&#xff09;之间请求和响应的标准。 HTTP 协议是以 ASCII 码传输&…...

差分数组汇总

本文涉及知识点 算法与数据结构汇总 差分数组 令 a[i] ∑ j : 0 i v D i f f [ i ] \sum_{j:0}^{i}vDiff[i] ∑j:0i​vDiff[i] 如果 vDiff[i1]&#xff0c;则a[i1…]全部 如果vDiff[i2]–,则a[i2…]全部–。 令11 < i2 &#xff0c;则&#xff1a; { a [ i ] 不变&…...

SpringBoot | 实现邮件发送

运行环境&#xff1a; IntelliJ IDEA 2022.2.5 (Ultimate Edition) (注意&#xff1a;idea必须在2021版本以上&#xff09;JDK17 项目目录&#xff1a; 该项目分为pojo,service,controller,utils四个部分&#xff0c; 在pojo层里面写实体内容&#xff08;发邮件需要的发件人邮…...

spring boot接入nacos 配置中心

再接入nacos配置中心时&#xff0c;需要确认几点&#xff1a; 1. spring boot 版本 (spring boot 2.x ) 2. nacos 配置中心 服务端 版本 (1.1.4) 3. nacos client 客户端版本 (1.1.4) 方式一 1. 启动 nacos 服务端&#xff0c;这里不做解释 在配置中心中加入几个配置 2. 在…...

产品应用 | 小盒子跑大模型!英码科技基于算能BM1684X平台实现大模型私有化部署

当前&#xff0c;在人工智能领域&#xff0c;大模型在丰富人工智能应用场景中扮演着重要的角色&#xff0c;经过不断的探索&#xff0c;大模型进入到落地的阶段。而大模型在落地过程中面临两大关键难题&#xff1a;对庞大计算资源的需求和对数据隐私与安全的考量。为应对这些挑…...

uniapp中u-input点击事件失效

当给u-input设置了disabled/readonly属性后&#xff0c;pc浏览器中点击事件失效&#xff0c;但是app/移动端h5中却仍有效 解决办法 给外边包上一个盒子设置点击事件&#xff0c;给input加上css属性&#xff1a;pointer-events&#xff1a;none pointer-events CSS 属性指定在什…...

[机器学习] 监督学习和无监督学习

监督学习和无监督学习是机器学习的两种主要方法&#xff0c;它们之间有几个关键区别&#xff1a; 1. 定义 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a; 使用带标签的数据进行训练。数据集包括输入特征和对应的输出标签。目标是学习从输入特征到输出标签…...

做网站要有什么团队/网站收录查询代码

在php中&#xff0c;可以使用array_flip()函数来将数组key和值转换&#xff0c;语法格式“array_flip(array);”。array_flip()函数可以让数组的键名(key)与其相应值调换&#xff0c;即键名变成了值&#xff0c;而值变成了键名。本教程操作环境&#xff1a;windows7系统、PHP7.…...

做张家界旅游网站多少钱/上海网站关键词排名优化报价

一、Tomcat的安装及简单使用在网上找到你需要安装的Tomcat版本&#xff0c;解压到你需要安装的目录就可以了目录介绍&#xff1a;bin 专门用来存放 Tomcat 服务器的可执行程序conf 专门用来存放 Tocmat 服务器的配置文件lib 专门用来存放 Tomcat 服务器的 jar 包logs 专门用来存…...

宁波企业名称查询网站/世界杯最新排名

题目&#xff1a;原题链接&#xff08;中等&#xff09; 标签&#xff1a;队列 解法时间复杂度空间复杂度执行用时Ans 1 (Python)所有操作 O(1)O(1)O(1)O(K)O(K)O(K)80ms (89.72%)Ans 2 (Python)Ans 3 (Python)LeetCode的Python执行用时随缘&#xff0c;只要时间复杂度没有明…...

app制作软件哪个好/seo培训网

BMP&#xff08;全称Bitmap&#xff09;是Windows操作系统中的标准图像文件格式&#xff0c;可以分成两类&#xff1a;设备有向量相关位图&#xff08;DDB&#xff09;和设备无向量相关位图&#xff08;DIB&#xff09;。 BMP文件的图像深度可选lbit、4bit、8bit及24bit。 BMP文…...

股票分析网站可以做推广吗/宣传渠道和宣传方式有哪些

个人杂谈 到了新的公司上了四天的班&#xff0c;总体来说感觉良好&#xff0c;心情也很舒畅&#xff0c;就是每天早上上班很麻烦&#xff0c;公交车也不是很多&#xff0c;老堵车&#xff0c;西安的交通一向都是这个样子&#xff0c;人多&#xff0c;车少&#xff0c;交通混乱&…...

杭州网站建设官方蓝韵网络/什么是竞价

目录 1、匿名内部类 2、包装类实现原理分析 3、装箱与拆箱 4、数据类型转换 5、总结 本文讲解的扩展内容&#xff0c;包括&#xff1a;匿名内部类、包装类实现原理分析、装箱与拆箱、数据类型转换。 1、匿名内部类 匿名内部类&#xff0c;故名思意就是没有名字的内部类。…...