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

RTC实时显示时间(备份电源 备份域的作用)

RTC初始化配置

系统复位后,可通过 PWR 电源控制寄存器 (PWR_CR) 的 DBP 位保护 RTC 寄存器以防止

非正常的写访问。必须将 DBP 位置 1 才能使能 RTC 寄存器的写访问。

上电复位后,所有 RTC 寄存器均受到写保护。通过向写保护寄存器 (RTC_WPR) 写入一个

密钥来使能对 RTC 寄存器的写操作。

要解锁所有 RTC 寄存器(RTC_ISR[13:8]、 RTC_TAFCR 和 RTC_BKPxR 除外)的写保护,

需要执行以下步骤:

1. 将“0xCA”写入 RTC_WPR 寄存器。

2. 将“0x53”写入 RTC_WPR 寄存器。

写入一个错误的关键字会再次激活写保护。

保护机制不受系统复位影响。

总结:

①将电源控制寄存器(PWR->CR)的DBP位写1     //解除RTC控制器和备份寄存器的保护

配置这个寄存器之前,要使能电源控制器时钟 RCC->APB1

②往RTC_WPR 中写 0xca  再写 0x53

取消所有寄存器的写保护

   往RTC_WPR寄存器中随便写一个数据就会再次激活写保护

设置日历寄存器要求

要编程包括时间格式和预分频器配置在内的初始时间和日期日历值,需按照以下顺序操作:

1. 将 RTC_ISR 寄存器中的 INIT 位置 1 以进入初始化模式。在此模式下,日历计数器将停

止工作并且其值可更新。

2、轮询查INITF 判断是否日历真的进入初始化模式  日历是否停止运行

3、设置时间和日期

4、退出初始化模式

总结:

要想改变日历寄存器的时间的值或者分频值,需要让日历进入初始化模式(日历停止工作)

更改完以后,要想日历继续工作,需要退出初始化模式(自由模式)

进入初始化模式

RTC->ISR 寄存器的INIT位写1

检测是否允许更新(改变)日历值位  INITF

设置日期和时间寄存器

退出初始化模式  

RTC->ISR 寄存器的INIT位写0

设置时间和日期程序

{

//进入日历初始化模式

//等待进入初始化模式完成

//设置日期和时间

//退出日历初始化模式

}

读取日历时间和日期

要想读时间和日期,要等待时间和日期同步(加载到影子寄存器),、

如何等待时间和日期同步到影子寄存器

ISR寄存器中RSF位要先清零,然后等待置1,读时间或者日期值.

获取时间和日期

{

        清零同步标志位;

        等待同步标志位置1;

        读取时间寄存器

        清零同步标志位;

        等待同步标志位置1;

        读取日期寄存器;

}

​​​​​​​寄存器

CR:

6位    0 设置时间格式     24小时

5位    0   //更新影子设置

   

ISR:

7位   进入初始化模式   先写1  配置完时间后在复位为0

6位   7位写1后,到用此位等到位1后才可以去编程时间

5位   同步标志,读日历寄存器的时候要看此位是否为1才可以读

PRER

使用默认值   15        256  分频

RTC 写保护寄存器 (RTC_WPR)

0xCA

0x53

TR

DR

BCD码

①什么是BCD码

19------0x19

0x19----19

②如何将用户的时间(十进制)设置到寄存器中

设置时间:把用户设置的十进制时间,转换成相应的BCD码,写入到寄存器中

③如何将寄存器的时间(BCD)给用户(十进制)

获取时间:把寄存器中的BCD码,转换成十进制形式,给到用户

//十进制转BDC码    //设置时间用

参数 : 十进制

返回值:BCD码结果      

13   0x13  

u8 in_dec_out_bcd(u8 dec)  

{

        return  ((dec / 10) << 4) | (dec % 10);

}

//BCD码转十进制  //读时间使用

参数  :BCD码

返回值:十进制

0x13      13   

u8 in_bcd_out_dec(u8 bcd)

{

        return  (bcd  >> 4) * 10 + (bcd & 0x0f);

}        

设置日期和时间

让日历进入初始化模式

等待等待可以改变日期和时间寄存器

将设置的十进制数据转换成BCD码

设置TR 和 DR

退出初始化模式

获取日期和时间

ISR寄存器中RSF位0

等待同步完成(等待ISR寄存器中RSF位自动变为1)

读出日期寄存器的值(BCD码)

将读出的BCD码转换成十进制形式

ISR寄存器中RSF位0

等待同步完成(等待ISR寄存器中RSF位自动变为1)

读出时间寄存器的值(BCD码)

将读出的BCD码转换成十进制形式

打印,显示

备份电源作用是:

芯片断电可以让RTC继续工作,同时备份寄存器不复位

备份寄存器的作用:

防止芯片重新上电后,CUP重置初始时间

#include "rtc.h"/***********************************************
*函数名    :RTC_init
*函数功能  :RTC初始化配置
*函数参数  :无
*函数返回值:无
*函数描述  :			
************************************************/
void RTC_init(RTC_t time)
{/*解除对RTC控制器以及寄存器的写保护*///使能电源控制器时钟RCC->APB1ENR |= (1<<28);//电源控制寄存器PWR_CR DBP位写1 解除RTC控制器写保护PWR->CR |= (1<<8);//使能RTC控制器时钟  RCC备份域控制寄存器RCC->BDCR |= (1<<0); //使能外部低速时钟while(!(RCC->BDCR & (1<<1)));//等待时钟就绪RCC->BDCR |= (1<<8);//选择LSE时钟RCC->BDCR |= (1<<15);//使能RTC时钟//写入密钥解除RTC寄存器写保护RTC->WPR=0xCA;RTC->WPR=0x53;/*配置CR寄存器*/RTC->CR &=~(1<<6);//设置24小时格式RTC->CR &=~ (1<<5);//取影子寄存器里的值//操作完寄存器就要进行一次激活写保护RTC->WPR=0xff;/*设置初始时间*///	if(RTC->BKP0R !=500)  //设置备份域寄存器
//	{
//		/*设置初始时间*/
//		set_time(time);
//		RTC->BKP0R = 500;
//	}set_time(time);//调用设置时间函数}/***********************************************
*函数名    :in_dec_out_bcd
*函数功能  :将十进制数据转换成BCD码形式
*函数参数  :u8 dec
*函数返回值:u8
*函数描述  :设置时间时候使用			
************************************************/
u8 in_dec_out_bcd(u8 dec)
{return ((dec/10)<<4) | (dec%10);
}/***********************************************
*函数名    :set_time
*函数功能  :设置时间函数
*函数参数  :RTC_t time
*函数返回值:无
*函数描述  :			
************************************************/
void set_time(RTC_t time)
{u32 temp_tr=0;u32 temp_dr=0;//解除寄存器保护RTC->WPR=0xCA;RTC->WPR=0x53;//进入日历寄存器进入初始化模式 ISRRTC->ISR |= (1<<7);//等待初始化结束 也就是允许更新日历寄存器while(!(RTC->ISR & (1<<6)));//设置时间和日历(10进制转bcd码)temp_tr=(in_dec_out_bcd(time.h))<<16 | (in_dec_out_bcd(time.m))<<8  |      (in_dec_out_bcd(time.s));temp_dr=(in_dec_out_bcd(time.year-2000))<<16 | (in_dec_out_bcd(time.week))<<13     | (in_dec_out_bcd(time.mon))<<8 |(in_dec_out_bcd(time.day));//设置TR和DRRTC->TR = temp_tr;RTC->DR = temp_dr;//退出日历初始化模式RTC->ISR &=~(1<<7);//激活写保护(操作完寄存器就要进行一次激活写保护)RTC->WPR=0xff;	}/***********************************************
*函数名    :in_bcd_out_dec
*函数功能  :将BCD码形式数据转换成十进制
*函数参数  :u8 bcd
*函数返回值:u8
*函数描述  :获取时间使用	
************************************************/
u8 in_bcd_out_dec(u8 bcd)
{return (bcd>>4)*10 + (bcd & 0x0f);
}/***********************************************
*函数名    :get_time
*函数功能  :获取时间函数
*函数参数  :无
*函数返回值:RTC_t
*函数描述  :			
************************************************/
RTC_t get_time(void)
{RTC_t t;u32 temp_tr=0;u32 temp_dr=0;//解除寄存器保护RTC->WPR=0xCA;RTC->WPR=0x53;	//ISR寄存器中的RSF位0(同步清零)RTC->ISR &=~(1<<5);//等待同步完成while(!(RTC->ISR & (1<<5)));//读出时间寄存器的值(bcd码)temp_tr=RTC->TR;//ISR寄存器中的RSF位0(同步清零)RTC->ISR &=~(1<<5);	//等待同步完成while(!(RTC->ISR & (1<<5)));	//读出日期寄存器的值(bcd码)temp_dr=RTC->DR;//获取时间数据 将读出的BCD码转10进制t.h=in_bcd_out_dec(temp_tr>>16);t.m=in_bcd_out_dec(temp_tr>>8);t.s=in_bcd_out_dec(temp_tr);//获取时间数据 将读出的BCD码转10进制t.year=in_bcd_out_dec(temp_dr>>16)+2000;t.week=in_bcd_out_dec((temp_dr>>13)&0x07);t.mon=in_bcd_out_dec((temp_dr>>8)&0x1f);t.day=in_bcd_out_dec(temp_dr);//	t.year = in_bcd_out_dec(temp_dr >> 16) + 2000;
//	t.week = in_bcd_out_dec((temp_dr & 0xe000) >> 13);
//	t.mon = in_bcd_out_dec((temp_dr & 0x1f00) >> 8);
//	t.day = in_bcd_out_dec(temp_dr>> 0);//激活写保护RTC->WPR=0xff;	 return t;}

设置好设置时间函数、获取时间函数后 通过定时中断可以实现1s打印一次时间

相关文章:

RTC实时显示时间(备份电源 备份域的作用)

RTC初始化配置 系统复位后&#xff0c;可通过 PWR 电源控制寄存器 (PWR_CR) 的 DBP 位保护 RTC 寄存器以防止 非正常的写访问。必须将 DBP 位置 1 才能使能 RTC 寄存器的写访问。 上电复位后&#xff0c;所有 RTC 寄存器均受到写保护。通过向写保护寄存器 (RTC_WPR) 写入一个…...

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址: 论文地址点击即可跳转 官方代码地址: GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候,都会丢失一定的信息。针对这一问题:...

学生管理系统详细需求文档

文章目录 1. 引言1.1 目的1.2 范围 2. 功能性需求2.1 用户认证2.1.1 登录 2.2 学生信息管理2.2.1 学生档案2.2.2 学籍管理 2.3 课程管理2.3.1 课程信息2.3.2 选课系统 2.4 成绩管理2.4.1 成绩录入2.4.2 成绩查询 2.5 课程进度和通知2.5.1 课程日历2.5.2 通知和提醒 2.6 学生活动…...

产品经理功法修炼(4)之产品管理

点击下载《产品经理功法修炼(4)之产品管理》 产品经理功法修炼(1)之自我管理 产品经理功法修炼(2)之专业技能 产品经理功法修炼(3)之产品设计 产品经理功法修炼(4)之产品管理 产品经理功法修炼(5)之团队管理 1. 前言 产品经理的能力修炼并非局限于某一技能的…...

【LeetCode热题100】【二叉树】二叉树展开为链表

题目链接&#xff1a;114. 二叉树展开为链表 - 力扣&#xff08;LeetCode&#xff09; 就先序遍历的顺序&#xff0c;其实就是简单的深度遍历顺序&#xff0c;装进一个容器里面再前一个后一个串连起来&#xff0c;注意容器的size是个无符号数&#xff0c;无符号数和有符号运行…...

云原生__K8S

createrepo --update /var/localrepo/# 禁用 firewall 和 swap [rootmaster ~]# sed /swap/d -i /etc/fstab [rootmaster ~]# swapoff -a [rootmaster ~]# dnf remove -y firewalld-*[rootmaster ~]# vim /etc/hosts 192.168.1.30 harbor 192.168.1.50 master 192.168.1.…...

nginx配置证书和私钥进行SSL通信验证

文章目录 一、背景1.1 秘钥和证书是两个东西吗&#xff1f;1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key1.3介绍下nginx支持的证书类型1.4 目前nginx支持哪种证书格式&#xff1f;1.5 nginx修改配置文件目前方式也会有所不同1.6 介绍下不通格式的证书哪…...

【面试题】微博、百度等大厂的排行榜如何实现?

背景 现如今每个互联网平台都会提供一个排行版的功能&#xff0c;供人们预览最新最有热度的一些消息&#xff0c;比如百度&#xff1a; 再比如微博&#xff1a; 我们要知道&#xff0c;这些互联网平台每天产生的数据是非常大&#xff0c;如果我们使用MySQL的话&#xff0c;db实…...

com.intellij.diagnostic.PluginException 问题

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、 推荐阅读 一、导读 遇到…...

Altair® (澳汰尔)Inspire™ Render —— 强大的 3D 渲染和动画工具

Inspire Render 是一种全新 3D 渲染和动画工具&#xff0c;可供创新设计师、建筑师和数字艺术家以前所未有的速度快速制作精美的产品演示。 借助基于物理特性的内置高品质全局照明渲染引擎 Thea Render&#xff0c;可以快速创建、修改和拖放各种材质并添加照明环境&#xff0c…...

虚幻引擎启动报错记录

0x00007FFEF0C8917C (UnrealEditor-CoreUObject.dll)处(位于 UnrealEditor.exe 中)引发的异常: 0xC0000005: 写入位置 0x0000000000000030 时发生访问冲突。 解决办法&#xff1a;首先查看堆栈信息&#xff0c;我的项目启动是因为默认场景编译不过&#xff0c;进到编辑器配置文…...

最祥解决python 将Dataframe格式数据上传数据库所碰到的问题

碰到的问题 上传Datafrane格式的数据到数据库 会碰见很多错误 举几个很普遍遇到的问题(主要以SqlServer举例) 这里解释下 将截断字符串或二进制数据 这个是字符长度超过数据库设置的长度 然后还有字符转int失败 或者字符串转换日期/或时间失败 这个是碰到的需要解决的最多的问…...

【汇编语言实战】统计个数

已知10个分布在0至100内的正整数&#xff0c;统计大于等于60的数的个数和小于60的数的个数 C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int arr1[]{11,33,73,52,93,84,67,56,64,75};int num10;for(int i1;i<10;i){if(arr1[i]>60){num1;}}p…...

SQLite数据库概述及在Java中的应用

## 什么是SQLite数据库&#xff1f; SQLite是一种轻量级的数据库管理系统&#xff0c;它不需要一个独立的服务器进程或操作系统的运行&#xff0c;而是将整个数据库&#xff0c;包括定义、表、索引以及数据本身&#xff0c;全部存储在一个独立的磁盘文件中。SQLite的设计理念是…...

嵌入式单片机补光灯项目操作实现

1.【实验目的】 用于直播效果的补光 2.【实验原理】 原理框架图2.各部分原理及主要功能 1.充电和供电:采用5V2A tepy_c接口充电,3.7V锂电池供电, 2.功能:产品主要是用于直播或拍照时的补光。分为三个模式:白光/暧光&#x...

【3GPP】【核心网】核心网/蜂窝网络重点知识面试题二(超详细)

1. 欢迎大家订阅和关注&#xff0c;3GPP通信协议精讲&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 目录 1. 对于主要的LTE核心网接口&#xff0c;给出运行在该接口上数据的协议栈&#xff0c;并给出协议特征 2. 通常…...

R语言记录过程

如何使用这个函数as.peakData 函数构造过程 出现问题是缺少函数的问题 up不告诉我&#xff0c;这里是代表c,h,o的值&#xff0c;你从里面获取把值&#xff0c;设置成c,h,o就可以了 现在开始测试参数 第一次 startRow : 开始查找数据的第一行。不管startRow的值是多少&#xff…...

【leetcode面试经典150题】36. 旋转图像(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…...

AOP 面向切面编程 入门练习

编写过程 添加依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><…...

【Qt】:对话框(一)

对话框 一.基本的对话框二.自定义对话框三.通过图形化界面自定义对话框四.关于对话框mode 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口&#xff0c;出现在程序最上层&#xff0c;用于实现短期任务或者…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...

Springboot 高校报修与互助平台小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;高校报修与互助平台小程序被用户普遍使用&#xff0c;为…...

【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...

Android多媒体——音/视频数据播放(十八)

在媒体数据完成解码并准备好之后,播放流程便进入了最终的呈现阶段。为了确保音视频内容能够顺利输出,系统需要首先对相应的播放设备进行初始化。只有在设备初始化成功后,才能真正开始音视频的同步渲染与播放。这一过程不仅影响播放的启动速度,也直接关系到播放的稳定性和用…...

EC2安装WebRTC sdk-c环境、构建、编译

1、登录新的ec2实例&#xff0c;证书可以跟之前的实例用一个&#xff1a; ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境&#xff1a; https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...