STM32之RTC原理
一、RTC时钟框图分析(重要)
先熟悉一下几个知识点:
1、STM32的实时时钟(RTC)是一个独立的定时器!
2、RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位火从待机模式唤醒后RTC的设置和时间维持不变。
RTC这章中,对RTC相关的寄存器的操作特别重要,我在这里不解释了,请查阅手册。。
先上图!
RTC时钟框图
RTC时钟框图分为完全独立的两个部分:1、APB1接口部分(用来RTC相关的寄存器);2、RTC核心;
第一部分: APB1接口。注意:这里涉及到寄存器RTC_CRL中的RSF位,这位是寄存器的同步标志,具体内容去看STM32参考手册RTC这一章。
第二部分: RTC核心。这里分为两个模块:1、RTC预分频器模块;2、一个32位的可编程计数器;
下面开始分析第二部分:
先给大家介绍下后备区域的几个特别重要的寄存器:
1、RTC_DIV(重要):RTC预分频器余数寄存器。这个寄存器的作用是来获得比秒钟更加准确的时钟(0.1s,0.01s),该寄存器是自减的,用来保存还需要多少个时钟周期获得一个秒信号。这里加上一个公式(STM32参考手册里有):fTR_CLK=fRTCCLK/(PRL[19:0]+1) 到这里是书上的原话~!
解释一下, RTC_DIV寄存器的值是由RTC_PRL(RTC预分频器装载寄存器)提供的,而RTC_DIV寄存器的时钟频率是由RTCCLK提供的(看图)。比如我们把 RTC_PRL值设为32767,则 RTC_DIV寄存器的值也为32767,他和RTCCLK的时钟频率是一样的(这里根据上面的公式,RTC_PRL加1,则 RTC_DIV也加1)。RTCCLK的时钟周期是1/32768(s),也就是每一个RTCCLK的时钟周期,RTC_DIV自减1,直至到1s钟后,被硬件重新装载,也就是1s钟减32768次。那他到底是怎么提供0.1s,甚至是0.01s的呢?
举个例子就明白了。比如我想要得到1.12秒的这个时间,就要求RTC_DIV自减0.12/(1/32768)次。RTC_DIV只得到0.12s的时间,还有1s时间从哪儿来?他是TR_CLK提供的。这个问题会在下文讲解。。 →_→
2、RTC_PRL:RTC预分频装载寄存器。这个寄存器有两个作用:1、提供给RTC_DIV的重新装载值;2、设置时钟分频系数。
第一个作用不讲了。第二个作用: 设置时钟分频系数。比如我们使用32.768KHz的晶振作为时钟输入,那么我们配置这个寄存器值位32767,就可以得到1s钟的计数频率(32768/(32767+1),单位(HZ))。
3、RTC_CNT(重要):RTC计数器寄存器。这个寄存器较简单,用来记录秒钟值。如果之前对RTC_CR(控制寄存器),的相关中断允许位配置的话,RTC_CNT寄存器可以产生一个溢出中断。
4、RTC_ALR:RTC闹钟寄存器。从图中就可以看出来,很简单。用来标记闹钟产生时间,如果RTC_CNT的值和RTC_ALR的值相等的话,并使能中断的话( 在RTC_CR(控制寄存器)中配置),会产生一个闹钟中断。
后备区域的寄存器就给大家介绍到这儿。相比大家通过上面的介绍结合框图,头脑里面应该有个大致流程了吧。没有~!?卧槽~那就给大家理一遍思路 →_→
首先外部加进来一个时钟信号RTCCLK(32.768K),然后设置RTC_PRL的分频系数为32767,得到一个秒时钟信号TR_CLK(1HZ)。当TR_CLK每过一个时钟周期,产生一个RTC_Second(秒钟中断),同时RTC_CNT计数器(记录秒值)加1。如果要求更精准的时间,还可以在RTC_CR寄存器的RSF位被置1时去读RTC_DIV的值。
STM32之RTC原理相关推荐
- 【STM32】RTC实时时钟,步骤超细详解,一文看懂RTC
什么是RTC RTC (Real Time Clock):实时时钟 RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可以重新设置当 ...
- STM32开发 -- RTC详解
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/81409693 RTC实时时钟部分,之前也是有讲到过的. Hi3516A开发– ...
- STM32之RTC时钟
前言 了解实时时钟RTC的原理.STM32芯片自带RTC,因此不须像其他MCU需外接RTC模块.请编程实现STM32的日历读取.设置和输出.要求: 1)读取RTC初始时间,验证是否为 1970年1月1 ...
- STM32的RTC晶振不起振的原因及解决方法
STM32外部晶振不起振 使用STM32cubemx生成工程换一个单片机的型号,晶振会启震, 使用STM32cubemx生成工程不起振,烧录标准库的程序后,晶振启震,再烧录STM32cubemx生成工 ...
- 【STM32】RTC的初始化与基本使用(CT117E电路)
目录 RTC的初始化与基本使用 RTC的初始化 RTC的基本使用 参考文献 RTC的初始化与基本使用 STM32 的实时时钟(RTC)是一个独立的定时器.STM32 的 RTC 模块拥有一组连续计数 ...
- 关于STM32使用RTC时复位后程序死在 RTC
在软件仿真时如果不需要配置,则程序会死在 RTC_WaitForSynchro() 函数中.而下载到硬件上时,有时候可以跑,有时候也会在该函数中死循环. 可能的原因: 首先,一定要确认是否使能了对后备 ...
- STM32 FSMC/FMC原理保姆级讲解(二)
上一话我们说了FSMC的基本原理及控制逻辑,这一讲我们来说下FSMC如何通过HAL库来进行配置,及具体参数 STM32 FSMC/FMC原理保姆级讲解(一) FSMC的初始化 在使用SRAM之前,我们 ...
- STM32 FSMC/FMC原理保姆级讲解(一)
FSMC通俗讲解 FSMC 框图 FMC引脚说明 FMC地址映射 FSMC不同位宽操作 FSMC寄存器 FSMC时钟 FSMC 四种模式 FSMC参数设置 FSMC 控制异步 NOR FLASH 的时 ...
- STM32之RTC实时时钟
RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运 ...
最新文章
- 【视觉SLAM14讲】ch3课后题答案
- proxmoxve打造云桌面_AIO攻略 | 桌面云是如何解决外设问题的?
- mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?
- 网页中获取微信用户是否关注订阅号的思路
- 3.2.1 OS之虚拟内存的基本概念(局部性原理、高速缓存、虚拟内存的实现)
- 职场有多少IT精英透支健康和生命?
- 用JavaScript将数字转换为大写金额
- 剑指Offer之数组中重复的数字
- python机器学习库sklearn——SGD梯度下降法
- 关于唐杰老师18年KDD-DeepInf-社会影响力论文初次理解《DeepInf: Social Influence Prediction with Deep Learning》
- stl_algorithm算法之排序算法
- 一洽客服平台的技术生产力
- WDM驱动开发 电源管理
- 11 年膨胀 575 倍,微信为何从“小而美”变成了“大而肥”?
- uniapp 截图或者生成海报
- 怎么看域名是否解析成功
- 智能设备系统的测试分析——语音识别系统和面部识别系统
- 浅谈程序员的英语学习 - 风口上的猪 - 博客园
- 智慧社区网格化管理php,智慧社区建设:创建社区网格化管理
- 高密度配线架选择指南
热门文章
- C++ opengl 复合运动
- Qt学习笔记-QSqlModel的事物操作
- 河南省计算机三级准考证打印入口,2016年下半年河南计算机三级准考证打印入口及网址,计算机等级考试时间查询...
- blast2go mysql_Blast2go本地化教程
- python英文词频统计代码_python实现中文和英文的词频统计功能方法汇总
- Android 中opengl es灯光效果实例
- (王道408考研操作系统)第三章内存管理-第二节1:虚拟内存管理基本概念
- C语言重难点:大端小端
- qt中的菜单QMenu QAction
- 使用C语言文件合并再排序