【STM32】详解RTC实时时钟的概念和配置示例代码

article/2025/8/6 23:45:34

一、什么是RTC
RTC(Real-time Clock):实时时钟,本质上是一个支持BCD编码的定时器/计数器。主电源断电后能够由电池供电,使其时钟跳转依然正常。
二、STM32F4芯片内的RTC功能
①日历时钟(时分秒、年月日、星期)
②两个闹钟——闹钟动作出发可支持中断
③定时唤醒功能(周期性唤醒)
④自动唤醒
⑤可以使用数字校准功能对晶振精度的偏差进行补偿。
⑥上电复位后,所有RTC寄存器都会受到保护,以防止可能的非正常写访问。
三、官方文档
1、RTC框图
在这里插入图片描述
LSE配置——RCC配置
异步通道分频器:1-128分频(RTC_PRER)
同步通道分频器:1-256分频(RTC_PRER)
日历寄存器:RTC_TR(时间寄存器),RTC_DR(日期寄存器)
RTC_SSR本质上是一个递减计数器:辅助更新日历
2、RTC初始化和配置(官方文档截取)在这里插入图片描述
3、日历初始化配置
在这里插入图片描述
四、总结
1、RTC的寄存器属于后备区域——电池供电可继续工作,RTC内有20个后备寄存器
2、不是所有RTC寄存器都有写保护
默认无写保护的RTC寄存器:RTC_ISR[13:8]位、RTC_TAFCR、RTC_BKPxR(20个)。
其他RTC寄存器想要解除写保护需要:
①PWR使能
②开启后备区域访问权限
③通过向RTC_WPR写入指定密钥“0xCA”“0x53”
3、影子寄存器:SSR TR DR
RTC本身有这些寄存器,但是他们有写保护,所以每次想读取时间太麻烦,给这些RTC内的时间、日期、亚秒寄存器设置一个备份(在普通APB1外设),不用管写保护问题,直接访问即可。
五、RTC编程
1、读取RTC备份寄存器
RTC_ReadBackupRegister(RTC_BKP_DR0) == 0x32F2
2、开始第一次配置RTC
①使能PWR时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);//开启后备寄存器区域访问

使能RTC时钟

RCC_LSEConfig(RCC_LSE_ON);//开启外部低速晶振
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)//等待LSE稳定就RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RCC中选择LSE作为RTC时钟
RCC_RTCCLKCmd(ENABLE);//使能RTC时钟不管你是LSI 还是LSE
RTC_WaitForSynchro();//等待寄存器同步标志位置位

②RTC配置
同步和异步分频系数(RTC_PRER)和时制(12/24)

RTC_Init(&RTC_InitStructure);

③设置日期

RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);

④设置时间

RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);

⑤写入备份寄存器一个独特的标志值,用来区分是否是第一次初始化RTC

RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);

六、示例代码

void RTC_Config(void)
{RTC_InitTypeDef RTC_InitStructure;RTC_DateTypeDef RTC_DateStructure;RTC_TimeTypeDef RTC_TimeStructure;//读取备份区域的寄存器  看看是否是第一次初始化if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x1224){//第一次初始化//1-使能PWR时钟 和RTC时钟配置RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);PWR_BackupAccessCmd(ENABLE);//PWR_CR---DBP//		RCC_LSEConfig(RCC_LSE_ON);//开启LSE晶振
//		while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==0);//等待LSE稳定就绪
//		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RCC中选择LSE作为RTC时钟
//		RCC_LSICmd(ENABLE);/* Wait till LSI is ready */  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET){}/* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);RCC_RTCCLKCmd(ENABLE);//使能RTC时钟不管你是LSI 还是LSERTC_WaitForSynchro();//等待寄存器同步标志位置位 ISR--RSF//2-初始化RTCRTC_InitStructure.RTC_AsynchPrediv = 128-1;//异步分频系数 0x00~0x7FRTC_InitStructure.RTC_SynchPrediv  = 256-1;//同步分频系数 0x00~0x7FFFRTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//24RTC_Init(&RTC_InitStructure);//3-设置日期RTC_DateStructure.RTC_Year  = 0x21;//21年RTC_DateStructure.RTC_Month = 0x09;//9月RTC_DateStructure.RTC_Date  = 0x14;//14号RTC_DateStructure.RTC_WeekDay = 0x02;//周二RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);//4-时间设置  时分秒  16:06:00RTC_TimeStructure.RTC_Hours = 0x16;RTC_TimeStructure.RTC_Minutes = 0x06;RTC_TimeStructure.RTC_Seconds = 0x00;RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);   RTC_WriteBackupRegister(RTC_BKP_DR0,0x1224);}else{RCC_LSICmd(ENABLE);/* Wait till LSI is ready */  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET){}/* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);if(RCC_GetFlagStatus(RCC_FLAG_PINRST) == 1){PFout(10)= 1;//亮第二盏灯delay_s(1);//表示复位按键按下 复位PFout(10)= 0;//亮第二盏灯}//非第一次执行此初始化if(RCC_GetFlagStatus(RCC_FLAG_PORRST) == 1){PFout(9)= 1;//亮第二盏灯delay_s(1);//表示上电复位PFout(9)=0;//亮第一盏灯RCC_ClearFlag();}//只要使能后备区域访问 和 等待影子寄存器同步RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);PWR_BackupAccessCmd(ENABLE);//PWR_CR---DBPRTC_WaitForSynchro();//等待寄存器同步标志位置位 ISR--RSF}
}

http://chatgpt.dhexx.cn/article/eAUEy4Cd.shtml

相关文章

android小错误:Failure retrieving text 0x7f050001 in package

1.在启动android应用程序的过程中,logcat打印如下的错误: 报错的原因:资源的id没有找到。资源在R.java文件中,找到0x7f050001 对应的定义 R.java public static final int AppTheme0x7f050001; AppTheme这个文件在AndroidMan…

Windows7系统蓝屏-解决办法, 错误代码:0x0000007F

1.电脑突然蓝屏提示stop:0x0000007F,如下图所示: 2.故障排除 重启电脑,一直按F8,进入“安全模式”,如能正常进入系统,查看系统错误日志。针对系统记录的错误日志,解决问题。如下图,…

java.lang.IllegalArgumentException No view found for id 0x7

java.lang.IllegalArgumentException No view found for id 0x7 布局上找不到这个View,看下ERROR的地方,可以看到是因为Container找不到因此报错了。 从布局入手,参考了很多文章主要分为以下两种原因 1 Fragment 嵌套了 Fragment 例如&…

Fragment报java.lang.IllegalArgumentException:No view found for id 0x7f070250的错误

我用的是Fragment嵌套Fragment做的,放fragment切换快的时候程序就会崩溃,解决这个办法就是在View生成前先将FragemnentManger创建好,就不会报错了

Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f解析

先看日志报错这个错误纠结我两天了,真的要崩溃了~_~ 关于android.content.res.Resources$NotFoundException: Resource ID的问题,那行代码是onCreate加载.xml布局,是加载的R.layout.xxxx,不是R.id.xxxx,布局文件存在&a…

关于No view found for id 0x7f080135 (com.xxx.xxx:id/viewpager) for fragment PopupWindow

最近在开发项目中,遇到了一个问题。PopupWindow中无法嵌套viewpagerFragment,现在进行总结一下。 问题描述:在Fragment中弹出一个PopupWindow,PopupWindow中用viewpager加载多个Fragment时出现上面问题。 网上搜的都是那些什么没有设置id之…

流水灯设计

流水灯设计 目的与要求 通过采用单片机控制8个LED发光二极管顺序点亮的流水灯系统设计与制作,让读者了解C语言的数据类型、常量与变量、运算符和表达式等基本概念及使用方法。 设计要求:首先点亮连接到P1.7引脚的发光二极管,延时一定时间后…

IT管理人才必备的十大能力

公众号回复:干货,领取价值58元/套IT管理体系文档 公众号回复:ITIL教材,领取最新ITIL4中文教材 正文 作为IT技术人员,相信没有一个人愿意永远在底层编写程序或做简单的系统维护。经过一段时间的技术和经验的积累&#x…

他,连续 3 年担任新星计划导师,这次的内容有点特别

一、新星计划 新星计划是一个发掘潜力新人、培养优质博主为目标的创作活动,通过为期两周的时间,明白为什么要写博客,写作的意义是什么?制定学习计划,完善Java知识体系。 二、学习计划 创作打卡阶段第1周&#xff08…

Python 彻底甩掉 Java,位居 48 种编程语言之首!

Python 彻底甩掉 Java,位居 48 种编程语言之首! 昨日,IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这个排行榜已经连续发布了五年。对于每位开发者而言,想要衡量编程语言流行度则需要依赖相对流行的网站统计数据…

java并发问题概述

转自 https://www.jb51.net/article/131411.htm java并发问题概述 转载 更新时间:2017年12月25日 09:28:54 作者:人圭先生 我要评论 这篇文章主要介绍了java并发问题概述,具有一定借鉴价值,需要的朋友可以参考下。 1什么是…

【Java基础系列教程】第一章 编程入门

一、计算机概述 1.1 计算机简介 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处…

关于程序员这14条经典定律,我全中~

定律1:最难定位的问题要么是最疑难的问题,要么是最低级的问题,这两种问题都有一个共同特征,就是让你意想不到。 举一个例子,一次代码编译不过,报函数没有定义,开始怀疑是类没有“;”结束符,然后怀疑有没有匹配的“{”,折腾了好久,最后才发现是开头的“#ifndef”定义…

系统性能优化的十大策略(强烈推荐,建议收藏)

点击关注公众号,实用技术文章及时了解 上篇 提升系统性能,榨干计算机资源是程序员的极致追求,今天跟大家聊聊性能优化。分为上中下三篇,由浅及深的写了关于性能优化的方方面面,并不仅仅局限于代码层面,希望…

JAVA工程师的十大借口,你知道哪些?

他们是近几十年来出现的新物种。他们的着装可能经常会遭到别人的吐槽,他们的玩笑可能别人也经常get不到笑点,他们心照不宣的执着让外人觉得莫名其妙。但同时,他们也拥有无与伦比的耐力,超越时代的智商,和横穿社会的自虐…

二八定律全面分析

二八定律 也叫 巴莱多定律 ,是19世纪末20世纪初 意大利 经济学家巴莱多发明的。他认为,在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的,因此又称二八法则。 …

【网络技术】什么是CNI

序言 你只管努力,其他交给时间,时间会证明一切。 Never look back unless you are planning to go that way. 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级论点蓝色:用…

java程序员找工作前需要准备的杀手锏有哪些?

高考前,我们要练兵考试和集训。”临阵磨枪不快也光 ”,找工作前,我们也必须要花很多精力去完成一些必要的准备。 “不打无准备之仗”, 精心准备和训练会对你有相当正面的作用。 有人认为“找工作要靠能力”。这话没错,我要说的是,“临阵磨枪准备的内容也是能力的一部分”…

《Java性能优化全攻略》分享

作为Java程序员,你希望写出高性能的代码吗? 什么样的互联网服务质量好?代码的高性能是必备的一环。怎样才能降低公司运营成本?提高系统容量的效率(服务器和数据中心)是重要的一部分。 代码看性能,公司重效率。怎么…

java技术点

后端架构师技术图谱 推荐: 《Java技术书籍大全》 - awesome-java-books 从初级开发者到资深架构师,看这些书就够了 数据结构 队列集合链表、数组字典、关联数组栈树 二叉树完全二叉树平衡二叉树二叉查找树(BST)红黑树B,B&#x…