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

STM32--RTC实时时钟

文章目录

  • Unix时间戳
  • 时间戳转换
  • BKP
  • RTC简介
  • RTC框图
  • 硬件电路
  • RTC的注意事项
  • RTC时钟实验工程

Unix时间戳

Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒

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

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

在这里插入图片描述

GMT : GMT(Greenwich Mean Time), 格林威治平时(也称格林威治时间)。
它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准。

UTC:UTC(Coodinated Universal Time),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。
UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。

时间戳转换

对于我们目前使用的电子设备,都是通过联网来确认时间戳的。所以我们看到的时间都是由时间戳转换成日期的。

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

在这里插入图片描述
这里讲几个会用到的。

第一个,time_t time(time_t*),获取系统时钟。
通过使用设备当前时间,获取一个时间戳。
在这里插入图片描述

第二个,struct tm* gmtime(const time_t*);秒计数器转换为日期时间(格林尼治时间)
在这里插入图片描述
这里需要注意的是struct tm 结构体类型成员year和mon
在这里插入图片描述
年是从1900年算起的,所以实际时间要加上1900;
月是从0开始的,所以要加上1;
时是由于计算是标准时间,所以要加上8才是东八区的标准时间。

第三个,time_t mktime(struct tm*);日期时间转换为秒计数器(当地时间)
在这里插入图片描述

由于STM32无法计算系统时钟,需要软件输入设置当前时间,所以也没有当地时间与标准时间的概念。

在这里插入图片描述

BKP

备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。(对于中小容量的产品,只能存储20个字节)他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。
也就是说,只要有一方供电,保存的数据就不会丢失;

BKP控制寄存器用来管理侵入检测和RTC校准功能

在这里插入图片描述

侵入检测:当TAMPER引脚上的信号从’0’变成’1’或者从’1’变成’0’(取决于备份控制寄存器BKP_CR的TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除
RTC校准:为方便测量, RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。
这里只是简单介绍这两种功能而已。
在这里插入图片描述

RTC简介

实时时钟是一个独立的定时器RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后, RTC的设置和时间维持不变。
在这里插入图片描述
操作访问方法与BKP相同。

相关特性
在这里插入图片描述

RTC框图

在这里插入图片描述
RTC时钟部分就是在后备区域内,上面连接着APB1总线进行读写的操作,
左边连接着RTC时钟源。
RTC核心部分是完全独立于APB接口的,需要通过软件,经过APB1接口访问RTC的预分频值,计数器值和闹钟值。
RTC预分频器会先预装重装载器,然后给到DIV,在RTCCLK时钟源进来的每一次,DIV以递减的方式,直到DIV为0时才将输出时钟传到CNT上;
CNT是一个计数器,用来存储时间戳;下面的ALR是闹钟寄存器,当CNT与ALR相等时,可以通过闹钟来产生中断;
这些产生的时钟信号经过控制寄存器进入NVIC中断控制器。
在这里插入图片描述

硬件电路

在这里插入图片描述
这部分是备用电池供电的电路,对于简单连接的就是直接连上一个3.3V供电的即可。
右边的是纽扣电池的连接方式。

在这里插入图片描述
外部低速晶振图,外部时钟的产生;
在这里插入图片描述

RTC的注意事项

执行以下操作将使能对BKP和RTC的访问:
设置RCC_APB1ENR的PWREN和BKPEN,使能PWR和BKP时钟
设置PWR_CR的DBP,使能对BKP和RTC的访问(开启RTC)

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

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

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

RTC时钟实验工程

OLED代码链接入口

连接方式:
在这里插入图片描述
在OLED屏幕显示一个实时时钟;

MyRTC.h

#ifndef __MYRTC_H__
#define __MYRTC_H__#include "stm32f10x.h"                  // Device header
#include <time.h>typedef struct Time
{int sec;int min;int hour;int mday;int mon;int year;}Time;void MyRTC_Init(Time* t);
void MyRTC_SetTime(Time* t);
void MyRTC_ReadTime(Time* t);#endif

MyRTC.c

#include "MyRTC.h"//时间设置
void MyRTC_SetTime(Time* t)
{time_t time_cnt;//计数器struct tm time_date;//时钟日期time_date.tm_year=  t->year-1900;time_date.tm_mon= t->mon-1;time_date.tm_mday= t->mday;time_date.tm_hour= t->hour;time_date.tm_min= t->min;time_date.tm_sec= t->sec;//设置计数器//日期转换为时间戳time_cnt=mktime(&time_date)-8*60*60;RTC_SetCounter(time_cnt);RTC_WaitForLastTask();   
}void MyRTC_Init(Time* t)
{//打开电源和后备接口的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);//开启RTC的使用PWR_BackupAccessCmd(ENABLE);// if(BKP_ReadBackupRegister(BKP_DR1)!=0x1111)// {//配置LSERCC_LSICmd(ENABLE);while(!RCC_GetFlagStatus(RCC_FLAG_LSIRDY));//RCCLK选择LSERCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//开启RTC的时钟源RCC_RTCCLKCmd(ENABLE);//时钟同步  RTC_WaitForSynchro();RTC_WaitForLastTask();//设置分频器,写操作等待完成RTC_SetPrescaler(32767);RTC_WaitForLastTask();//时间初始化设置MyRTC_SetTime(t);//非首次和完全断电给一个值//     BKP_WriteBackupRegister(BKP_DR1,0x1111);//  }// else// {//     RTC_WaitForSynchro();//     RTC_WaitForLastTask();// }}//读取时间
void MyRTC_ReadTime(Time* t)
{time_t time_cnt;//计数器struct tm time_date;//时钟日期//时间戳转换为日期time_cnt=RTC_GetCounter()+8*60*60;time_date=*localtime(&time_cnt);t->year=time_date.tm_year+1900;t->mon=time_date.tm_mon+1;t->mday=time_date.tm_mday;t->hour=time_date.tm_hour;t->min=time_date.tm_min;t->sec=time_date.tm_sec;
}

对于时钟的选择内部时钟LSI无法在断开电源和复位时进入后备区域;LSE外部时钟可以,我们可以设置一个值,只要是这个值说明就进入了后备区域。由于我的外部时钟晶振无法震荡,所以只能使用内部时钟,读者可以
修改为在这里插入图片描述
并将那些注释解开即可。
这里进行写操作时,函数中就已经进入了配置模式了
在这里插入图片描述
这里输入的时钟是东八区的时间,而设置计数器为标准时间的时间戳,所以要进行减去8* 60* 60
等到读取时间时再加回来

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyRTC.h"int main()
{Time time;time.year=2023;time.mon=1;time.mday=1;time.hour=23;time.min=59;time.sec=55;OLED_Init();MyRTC_Init(&time);MyRTC_SetTime(&time);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(&time);OLED_ShowNum(1, 6, time.year, 4);OLED_ShowNum(1, 11,time.mon, 2);OLED_ShowNum(1, 14, time.mday, 2);OLED_ShowNum(2, 6, time.hour, 2);OLED_ShowNum(2, 9, time.min, 2);OLED_ShowNum(2, 12, time.sec, 2);OLED_ShowNum(3, 6, RTC_GetCounter(), 10);OLED_ShowNum(4, 6, RTC_GetDivider(), 10);}}

相关文章:

STM32--RTC实时时钟

文章目录 Unix时间戳时间戳转换BKPRTC简介RTC框图硬件电路RTC的注意事项RTC时钟实验工程 Unix时间戳 Unix 时间戳是从1970年1月1日&#xff08;UTC/GMT的午夜&#xff09;开始所经过的秒数&#xff0c;不考虑闰秒。 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64…...

【N2】例题学习笔记

N2例题 《新"日本语能力测试"例题集》 听力原稿(PDF) 【10】 【問い】この筆者から見た「仕事ができる人」の特徴はどんなことか。 【提问】这位作者认为&#xff0c;仕事能力强的人具有什么特点呢&#xff1f; 【11】 文章 下の文章は、企業のあり方について…...

【数据分享】2006-2021年我国城市级别的道路、桥梁、管线建设相关指标(10多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标、2006-2021年我国城市级别的各类建设用地面积数…...

视觉SLAM14讲笔记-第7讲-视觉里程计2

直接法的引出 直接法是视觉里程计另一个主要分支&#xff0c;它与特征点法有很大的不同。 使用特征点法估计相机运动时&#xff0c;我们把特征点看作固定在三维空间的不动点。根据它们在相机中的投影位置&#xff0c;通过最小化重投影误差来优化相机运动。 相对地&#xff0c…...

MySQL——单行函数和分组函数

2023.9.3 单行函数的SQL语句学习笔记如下&#xff1a; #常见单行函数介绍&#xff08;部分省略&#xff09; #字符函数 #将姓变大写&#xff0c;名变小写&#xff0c;然后拼接。 SELECT CONCAT(UPPER(last_name), ,LOWER(first_name)) AS 姓名 FROM employees; # 姓名中首字符…...

百度百科词条怎么更新?怎么能顺利更新百科词条?

企业和个人百度百科词条的更新对于他们来说都具有重要的意义&#xff0c;具体如下&#xff1a; 对企业来说&#xff1a; 塑造品牌形象&#xff1a;百度百科是一个常被用户信任并参考的知识平台&#xff0c;通过更新企业词条可以提供准确、全面的企业信息&#xff0c;帮助企业塑…...

PPT怎么转换为PDF格式,收藏这两个在线工具。

PPT是一种常用的演示文稿格式&#xff0c;它可以包含丰富的动画效果和超链接&#xff0c;让你的内容更加生动和有趣。但是&#xff0c;如果你想将PPT分享给别人&#xff0c;或者在不同的设备上查看&#xff0c;你可能会遇到一些问题&#xff0c;比如&#xff1a; PPT文件太大&a…...

八大排序算法----堆排序

堆排序的基本步骤&#xff1a;&#xff08;以从大到小的顺序排序为例&#xff09; 1.构建大顶堆&#xff08;每个结点的值都大于或等于其左右孩子结点的值&#xff09; 2.排序&#xff1a;每次堆顶的元素取出来&#xff08;整个堆中值最大&#xff09;&#xff0c;与最后一个…...

Docker Desktop 设置镜像环境变量

点击run 展开Optional settings container name &#xff1a;容器名称 Ports&#xff1a;根据你需要的端口进行输入&#xff0c;不输入则默认 后面这个 比如我这个 5432 Volumes&#xff1a;卷&#xff0c;也就是做持久化 需要docker 数据保存的地方 Environment variables…...

springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)

配置的概念&#xff1a; Spring Boot是基于约定的&#xff0c;所以很多配置都有默认值&#xff0c;但如果想使用自己的配置替换默认配置的话&#xff0c;就可以使用application.properties或者application.yml(application.yaml)进行配置。 注意配置文件的命名必须是applicat…...

涛然自得周刊(第 5 期):蝲蛄吟唱的地方

作者&#xff1a;何一涛 日期&#xff1a;2023 年 8 月 20 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;不定期发。历史周刊内容可以看这里。 电影 《沼泽深处的女孩》 改编自小说《蝲蛄吟唱的地方》&#xff0c;主角是一位在沼泽地独自生活并长大的女孩&…...

Android Ble蓝牙App(七)扫描过滤

Ble蓝牙App&#xff08;七&#xff09;扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示&#xff0c;本篇文章中将增…...

小程序当前页面栈以及跳转

1.调用页面栈刷新接口 let pages getCurrentPages(); //当前页面栈 if (pages.length > 1) { let beforePage pages[pages.length - 2]; //获取上一个页面实例对象 beforePage.$vm.getActivityLi…...

jQuery获取表单的值val()

&#xff08;1&#xff09;页面中有很多元素&#xff0c;包括表单中的输入项&#xff0c;如输入文本框等&#xff1b;获取、设置、输入文本框的值&#xff1b;val()方法。 &#xff08;2&#xff09;也包括<p>、<span>等元素&#xff1b;获取、设置这些元素的文本…...

【专栏必读】数字图像处理(MATLAB+Python)专栏目录导航及学习说明

文章目录 第一章&#xff1a;绪论第二章&#xff1a;数字图像处理基础第三章&#xff1a;图像基本运算第四章&#xff1a;图像的正交变换第五章&#xff1a;图像增强第六章&#xff1a;图像平滑第七章&#xff1a;图像锐化第八章&#xff1a;图像复原第九章&#xff1a;图像形态…...

2023年非证券类投资银行业发展报告

第一章 行业概况 非证券投资银行业是一个专门为公司、政府和高净值个人提供金融服务的行业&#xff0c;与传统的证券投资银行不同&#xff0c;其主要业务不涉及证券交易&#xff0c;而是注重为客户提供咨询服务、融资和投资管理等服务。 非证券投资银行通常涉及的业务领域包括…...

Matlab 如何把频谱图的纵坐标设置为分贝刻度

Matlab 如何把频谱图的纵坐标设置为分贝刻度 Matlab代码如下&#xff1a; % 如何把频谱图的纵坐标设置为分贝刻度 % % pr2_2_6 clc; clear; close all;load pr2_2_6_sndata1.mat % 读入数据 X fft(y); % FFT n2 1:L/21; % 计算正频率…...

VUE写后台管理(2)

VUE写后台管理&#xff08;2&#xff09; 1.环境2.Element界面3.Vue-Router路由后台1.左导航栏2.上面导航条 1.环境 1.下载管理node版本的工具nvm&#xff08;Node Version Manager&#xff09; 2.安装node(vue工程的环境管理工具)&#xff1a;nvm install 16.13.0 3.安装vue工…...

RHCSA8.2

Node1 配置您的系统以使用默认存储库 配置您 的系统以使用默认存储库YUM 存储库已可以从 http://foundation0.ilt.example.com/dvd/BaseOS 和 http://foundation0.ilt.example.com/dvd/AppStream 使用配置您的系统&#xff0c;以将这些位置用作默认存储库[rootclear ~]# cat …...

修改linux中tomcat的端口

随便修改一个 以8055为例子 开放8081端口 firewall-cmd --permanent --add-port8081/tcp firewall-cmd --reload firewall-cmd --list-all...

学妹学Java(一)

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; Hello&#xff0c;亲爱的各位友友们&#xff0c;好久不见&#xff0…...

湖南省副省长秦国文一行调研考察亚信科技

9月5日&#xff0c;湖南省人民政府党组成员、副省长秦国文一行到亚信科技调研考察&#xff0c;亚信科技高级副总裁陈武主持接待。 图&#xff1a;双方合影 在亚信科技创新展示中心&#xff0c;秦国文了解了亚信科技在5G、算力网络、人工智能、大数据等前沿领域的创新探索&…...

k8s部署redis 3主3从

k8s部署redis6节点&#xff0c;组成3主3从集群模式 一般来说&#xff0c;redis部署有三种模式。 单实例模式&#xff0c;一般用于测试环境。 哨兵模式 集群模式后两者用于生产部署 哨兵模式 在redis3.0以前&#xff0c;要实现集群一般是借助哨兵sentinel工具来监控master节点…...

Vue2安装vuex和vue-router报错处理

Vue2安装vuex和vue-router报错处理 Vue2.6安装VuexVue2.6安装vue-router Vue2.6安装Vuex 报错信息 处理方法 #查看vuex版本 npm view vuex versions --json #安装合适版本 npm install vuex3.6.2 --saveVue2.6安装vue-router 报错信息 处理方法 #查看vue-router版本 npm…...

算法leetcode|79. 单词搜索(rust重拳出击)

文章目录 79. 单词搜索&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;进阶&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 79. 单词搜索&#xff1a; …...

2023年高教社杯全国大学生数学建模竞赛参赛事项注意

MathClub数模资源&#xff0c;含专属思路 资源链接&#xff1a;点击这里获取众多数模资料、思路精讲、论文模板latex和word、学习书籍等 2023高教社杯数学建模国赛–赛前准备 一年一度的数学建模国赛要来啦&#xff01;&#xff01;&#xff01;小编仔细阅读了比赛官方网站上…...

数学建模--逻辑回归算法的Python实现

首先感谢CSDN上发布吴恩达的机器学习逻辑回归算法任务的各位大佬. 通过大佬的讲解和代码才勉强学会. 这篇文章也就是简单记录一下过程和代码. CSDN上写有关这类文章的大佬有很多,大家都可以多看一看学习学习. 机器学习方面主要还是过程和方法. 这篇文章只完成了线性可分方面的任…...

Qt6_贪吃蛇Greedy Snake

贪吃蛇Greedy Snake 1分析 首先这是一个贪吃蛇界面&#xff0c;由一个长方形边框和一只贪吃蛇组成 默认开局时&#xff0c;贪吃蛇身体只有3个小方块&#xff0c;使用画笔画出 1.1如何移动 对于蛇的移动&#xff0c;有2种方法 在一定时间范围内(定时器)&#xff0c;未对游戏…...

Credo推出业界首款单片集成CMOS VCSEL驱动器的800G光DSP芯片

针对AOC及短距&#xff08;SR&#xff09;光模块优化的新型Credo DSP&#xff0c;适用于下一代超大规模数据中心/AI应用 加州圣何塞和中国深圳&#xff0c;2023年9月6日——Credo Technology&#xff08;纳斯达克股票代码&#xff1a;CRDO&#xff09;今日发布两款新品&#x…...

【经验分享】如何使用VSCode对比两个文件

问题&#xff1a; 当有两个不同版本的文件&#xff0c;如何使用VSCode对比两个文件 解决办法 长按ctrl选择想要对比的两个文件-----右键选择将已选项进行比较----大功告成 大功告成...

网站支付页面怎么做的/站长工具域名查询ip

在接收文件方面请仔细查看&#xff0c;IrDAClient().GetStream 返回Stream对象&#xff0c;他和TcpLister、TcpClient 的返回不一样&#xff0c;要特别注意。.NET Compact Framework 为设备之间的红外线通信提供类。此示例演示了如何使用红外线通信在设备之间发送和接收文件。您…...

山东网站建设报价/长春seo网站管理

在js、jquery中存在这大量的对象遍历&#xff0c;但是存在条件判断时传统的 break和continue 不一定能够使用。 在jQuery的 $.(selected).each({ }); 、$.each() 和 js的 obj.forEach函数体内不能使用break和continue。 所以代替方案就是在判断条件中使用 return true; 代替 c…...

厦门定制网站建设/网络公司名字

关于前端图表开发有很多基于Flash&#xff0c;HTML5&#xff0c;JavaScript的开源组件&#xff0c;而Java开源图表组件JFreeChart也是众所周知&#xff0c;网上关于JFreeChart的资料非常之多&#xff0c;可见其在Java开发中应用的相当广泛。写这篇文章一是为了记录一下关于JFre…...

贵阳做网站的大公司有哪些/引流黑科技app

ls /etc/sysconfig/network-scripts/ifcfg-* 列出所有的设备配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 打开配置文件进行编辑&#xff0c;BOOTPROTO默认情况是dhcp动态获取的&#xff0c;改成static静态&#xff0c;再添加网关信息 BROADCAST192.168.1.255IPAD…...

政府网站建设愿景/steam交易链接在哪里看

前言 前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法&#xff0c;仅仅要理解思想&#xff0c;几行代码。但是非递归写法却非常不easy。这里特地总结下&#xff0c;透彻解析它们的非递归写法。当中。中序遍历的非递归写法最简单&#xff0c;后序遍历最难…...

wordpress 内容 只调图片/网站流量查询平台

尝试着将一个文件夹下所有的图片写入视频中&#xff0c;由于自己比较熟悉opencv&#xff0c;所以网上找了个利用opencv的代码。&#xff08;前提条件是我已经在终端输入pip install opencv-python&#xff0c;并且pip list也显示opencv已安装。&#xff09; 但是当我运行代码时…...