一、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原理相关推荐

  1. 【STM32】RTC实时时钟,步骤超细详解,一文看懂RTC

    什么是RTC RTC (Real Time Clock):实时时钟 RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可以重新设置当 ...

  2. STM32开发 -- RTC详解

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/81409693 RTC实时时钟部分,之前也是有讲到过的. Hi3516A开发– ...

  3. STM32之RTC时钟

    前言 了解实时时钟RTC的原理.STM32芯片自带RTC,因此不须像其他MCU需外接RTC模块.请编程实现STM32的日历读取.设置和输出.要求: 1)读取RTC初始时间,验证是否为 1970年1月1 ...

  4. STM32的RTC晶振不起振的原因及解决方法

    STM32外部晶振不起振 使用STM32cubemx生成工程换一个单片机的型号,晶振会启震, 使用STM32cubemx生成工程不起振,烧录标准库的程序后,晶振启震,再烧录STM32cubemx生成工 ...

  5. 【STM32】RTC的初始化与基本使用(CT117E电路)

    目录 RTC的初始化与基本使用 RTC的初始化 RTC的基本使用 参考文献 RTC的初始化与基本使用 STM32 的实时时钟(RTC)是一个独立的定时器.STM32 的 RTC 模块拥有一组连续计数 ...

  6. 关于STM32使用RTC时复位后程序死在 RTC

    在软件仿真时如果不需要配置,则程序会死在 RTC_WaitForSynchro() 函数中.而下载到硬件上时,有时候可以跑,有时候也会在该函数中死循环. 可能的原因: 首先,一定要确认是否使能了对后备 ...

  7. STM32 FSMC/FMC原理保姆级讲解(二)

    上一话我们说了FSMC的基本原理及控制逻辑,这一讲我们来说下FSMC如何通过HAL库来进行配置,及具体参数 STM32 FSMC/FMC原理保姆级讲解(一) FSMC的初始化 在使用SRAM之前,我们 ...

  8. STM32 FSMC/FMC原理保姆级讲解(一)

    FSMC通俗讲解 FSMC 框图 FMC引脚说明 FMC地址映射 FSMC不同位宽操作 FSMC寄存器 FSMC时钟 FSMC 四种模式 FSMC参数设置 FSMC 控制异步 NOR FLASH 的时 ...

  9. STM32之RTC实时时钟

    RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运 ...

最新文章

  1. 【视觉SLAM14讲】ch3课后题答案
  2. proxmoxve打造云桌面_AIO攻略 | 桌面云是如何解决外设问题的?
  3. mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?
  4. 网页中获取微信用户是否关注订阅号的思路
  5. 3.2.1 OS之虚拟内存的基本概念(局部性原理、高速缓存、虚拟内存的实现)
  6. 职场有多少IT精英透支健康和生命?
  7. 用JavaScript将数字转换为大写金额
  8. 剑指Offer之数组中重复的数字
  9. python机器学习库sklearn——SGD梯度下降法
  10. 关于唐杰老师18年KDD-DeepInf-社会影响力论文初次理解《DeepInf: Social Influence Prediction with Deep Learning》
  11. stl_algorithm算法之排序算法
  12. 一洽客服平台的技术生产力
  13. WDM驱动开发 电源管理
  14. 11 年膨胀 575 倍,微信为何从“小而美”变成了“大而肥”?
  15. uniapp 截图或者生成海报
  16. 怎么看域名是否解析成功
  17. 智能设备系统的测试分析——语音识别系统和面部识别系统
  18. 浅谈程序员的英语学习 - 风口上的猪 - 博客园
  19. 智慧社区网格化管理php,智慧社区建设:创建社区网格化管理
  20. 高密度配线架选择指南

热门文章

  1. C++ opengl 复合运动
  2. Qt学习笔记-QSqlModel的事物操作
  3. 河南省计算机三级准考证打印入口,2016年下半年河南计算机三级准考证打印入口及网址,计算机等级考试时间查询...
  4. blast2go mysql_Blast2go本地化教程
  5. python英文词频统计代码_python实现中文和英文的词频统计功能方法汇总
  6. Android 中opengl es灯光效果实例
  7. (王道408考研操作系统)第三章内存管理-第二节1:虚拟内存管理基本概念
  8. C语言重难点:大端小端
  9. qt中的菜单QMenu QAction
  10. 使用C语言文件合并再排序