当前位置: 首页 > 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;用于实现短期任务或者…...

告别序列‘拉直’的暴力美学:手把手复现MaIR,体验保持图像局部与连续性的Mamba新玩法

告别序列“拉直”的暴力美学&#xff1a;手把手复现MaIR&#xff0c;体验保持图像局部与连续性的Mamba新玩法 在计算机视觉领域&#xff0c;图像修复任务&#xff08;如去噪、超分、去模糊&#xff09;一直是研究热点。传统方法往往将2D图像“拉直”为1D序列进行处理&#xff0…...

跨引擎资源无缝迁移:Unity到Godot的资产转换革新方案

跨引擎资源无缝迁移&#xff1a;Unity到Godot的资产转换革新方案 【免费下载链接】unitypackage_godot Import assets from UnityPackage files into Godot 项目地址: https://gitcode.com/gh_mirrors/un/unitypackage_godot 在游戏开发领域&#xff0c;引擎间的资源迁移…...

VRCT:打破虚拟社交语言壁垒的创新解决方案

VRCT&#xff1a;打破虚拟社交语言壁垒的创新解决方案 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台中&#xff0c;语言差异往往成为跨文化交流的最大障碍。当…...

Python+MinIO实战:5分钟搞定对象存储文件上传下载(附完整代码)

PythonMinIO实战&#xff1a;5分钟搞定对象存储文件上传下载&#xff08;附完整代码&#xff09; 对象存储正在成为现代应用开发中不可或缺的基础设施。无论是个人项目还是企业级应用&#xff0c;高效、可靠的文件存储方案都能显著提升开发效率。MinIO作为一款高性能的对象存储…...

Java后端开发——真实面试汇总(持续更新)

一.浙江大学研究院一面&#xff08;面试Time&#xff1a;1小时30分钟&#xff09;1. 面试官自我介绍&#xff0c;同时我开始自我介绍2. 平时接触到哪些数据结构&#xff1f;3. ArrayList和LinkedList的主要区别是什么&#xff1f;4. 数组和链表的主要区别是什么&#xff1f;5.…...

DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例)

DIFY vs LangChain&#xff1a;零代码与全代码AI开发框架实战对比&#xff08;附真实案例&#xff09; 当企业或开发者希望将大语言模型&#xff08;LLM&#xff09;能力整合到业务中时&#xff0c;选择适合的开发框架至关重要。DIFY和LangChain代表了两种截然不同的技术路线&a…...

沃虎电子:SFP连接器在高速光模块中的应用与选型要点

SFP&#xff08;Small Form-factor Pluggable&#xff09;连接器是现代光通信设备的核心接口组件&#xff0c;广泛应用于交换机、服务器、光模块等设备。随着数据中心向400G/800G演进&#xff0c;SFP连接器的性能要求不断提升。本文从工程实践角度&#xff0c;系统介绍SFP连接器…...

工厂里EtherCAT从站模块坏了别慌!手把手教你用Startup list和CoE-online快速换新(附配置顺序避坑指南)

工厂EtherCAT从站模块更换实战指南&#xff1a;Startup list与CoE-online的高效应用 当生产线上的EtherCAT从站模块突然罢工&#xff0c;设备维护工程师往往面临两难选择&#xff1a;是临时在线修改参数快速恢复生产&#xff0c;还是彻底解决"即插即用"的配置难题&am…...

Cursor Free VIP:突破AI编程助手限制的完整解决方案

Cursor Free VIP&#xff1a;突破AI编程助手限制的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial…...

swoole方案 WebSocket 下推消息优先级队列

WebSocket 推消息优先级队列 大白话先说清楚 普通弹幕&#xff1a; "哈哈哈哈哈" 优先级 1 (低) 礼物打赏&#xff1a; "送了火箭&#xff01;" 优先级 2 (中) 系统广播&#xff1a; "服务器维护通知" 优先级 3 (高)队列里同…...