STM32—BKP备份寄存器RTC实时时钟

1.BKP简介

  • BKP(Backup Registers)备份寄存器
  • BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位
  • TAMPER引脚产生的侵入事件将所有备份寄存器内容清除
  • RTC引脚输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲
  • 存储RTC时钟校准寄存器
  • 用户数据存储容量:
    • 20字节(中容量和小容量)/84字节(大容量和互联型)

2.BKP基本结构

这个图中橙色部分我们可以叫作后备区域,BKP处于后备区域,但后备区域不只有BKP,还有RTC的相关电路也位于后备区域,STM32后备区域的特性就是,当VDD主电源掉电时,后备区域仍然可以由VBAT的备用电池供电,当VDD主电源上电时,后备区域供电会由VBAT切换到VDD,也就是主电源有电时,VBAT不会用到,这样可以节省电池电量

然后BKP是位于后备区域的,BKP里主要有数据寄存器、制寄存器、状态寄存器和RTC时钟校准寄存器这些东西,其中数据寄存器是主要部分,用来存储数据的,每个数据寄存器都是16位的,也就是,一个数据寄存器可以存2个字节,那对于中容量和小容量的设备,里面有DR1、DR2、一直到、DR10总共10个数据寄存器,那一个寄存器存两个字节,所以容量是20个字节,然后对于大容量和互联型设备,里面除了DR1到DR10还有DR11、DR12、一直到、DR42,总共42个数据奇存器,容量是84个字节

然后,BKP还有几个功能,就是下面这里的侵入检测,可以从PC13位置的TAMPER引I脚引入一个检测信号,当TAMPER产生上升沿或者下降沿时清除BKP所有的内容,以保证安全,时钟输出可以把RTC的相关时钟从PC13位置的RTC引脚输出出去,供外部使用,其中,输出校准时钟时再配合这个校准寄存器,可以对RTC的误差进行校准

3.RTC简介

  • RTC(Real Time Clock)实时时钟
  • RTC是一个独立的定时器,可为系统提供时钟和日历的功能
  • RTC和时钟配置系统处于后备区域,系统复位时数据不清零VDD(2.0~3.6V)断电后可借助VBAT(1.8~3.6V)供电继续走时
  • 32位的可编程计数器,可对应Unix时间戳的秒计数器
  • 20位的可编程预分频器,可适配不同频率的输入时钟
  • 可选择三种RTC时钟源:
    • HSE时钟除以128(通常为8MHz/128)
    • LSE振荡器时钟(通常为32.768KHz)
    • LSI振荡器时钟(40KHz)

时钟系统

H(High)开头是高速,L(Low)开是低速,E(Extermal)结尾是外部,I(lnternal)结尾是内部,这里高速时钟,一般供内部程序运行和主要外设使用,低速时钟,一般供RTC、看门狗这些东西使用

RTCCLK有3个来源:第一个是OSC引脚接的HSE,外部高速晶振,这个呈振是主晶振,我们一般都用的8MHZ,8MHz进来,通过128分频,可以产生RTCCLK信号,为什么要先128分频呢,这是因为这个8MHz的主晶振太快了,如果不提前分频,直接给RTCCLK,后续即使再通过RTC的20位分频器,也分不到1HZ这么低的频率,所以8MHZ,提前先进行128分频,后续20位的分频器,再进行一个适当的分频,就可以输出1Hz的信号给计数器了

然后中间这一路,时钟来源是LSE,外部低速晶振,我们在OSC32这两个引脚,接上外部低速晶振,这个品振产生的时钟,可以直接提供给RTCCLK,这个OSC32的显振,是内部RTC的专用时钟,这个品振的值,也不是随便选的,通常跟RTC有关的晶振都是统一的数值,就是32.768KHZ,为什么选择这个数值,一方面是,32KHz这个值附近的频率是这个品振工艺比较合适的频率,另一方面是,32768,这是一个2的次方数,2^15=32768,所以32.768KHZ即32768HZ,经过一个15位分频器的自然溢出就能很方便地得到1Hz的频率,自然溢出的意思就是设计一个15位的计数器,这个计数器不用设置计数目标,直接从0计到最大值,就是计到32767,计满后自然溢出,这个溢出信号就是1HZ,自然溢出的好处,就是不用再额外设计一个计数目标了,也不用比较,计数器是不是计到目标值了,这样可以简化电路设计(最常用)

最后看第三路时钟源来自于LSI,内部低速RC振荡器,LSI,固定是40KHZ,如果选择LSI当作RTCCLK后续再经过40K的分频,就能得到1Hz的计数时钟了,当然内部的RC振荡器,一般精准度没有外部晶振高,所以LSI给RTCCLK,可以当作一个备选方案,另外,LSI还可以提供给看门狗

中间一路最常用,第一个原因就是,中间这路32.768KHz的显振,本身就是专供RTC使用的,上下这两路,其实是有各自的任务,上面这一路,主要作为系统主时钟,下面这一路,主要作为看门狗时钟,它们只是顺带可以备选当作RTC的时钟,另外更重要的是只有中间这一路的时钟,可以通过VBAT备用电池供电,上下两路时钟,在主电源断电后,是停止运行的,所以要想实现RTC主电源掉电继续走时的功能,必须得选择中间这一路的RTC专用时钟,如果选择的是上下两路时钟,主电源断电后,时钟就暂停了,这显然会号致走时出错

4.RTC框图

左边这一块是核心的、分频和计数计时部分,右边这一块是中断输出使能和NMIC部分,上面这一块是APB1总线读写部分,下面这一块是和PWR关联的部分,意思就是RTC的闹钟可以唤醒设备,退出待机模式,然后,在图中,我们看到有灰色填充的部分都处于后备区域,这些电路在主电源掉电后,可以使用备用电池维持工作,另外这里还写了,这些模块在待机时都会继续维持供电

首先,看分频和计数计时部分,这一块的输入时钟是RTCCLK,RTCCLK的来源需要在RCC里进行配置,可以选择的选项是这3个,主要选择中间一路,那因为这3路时钟,频率各不相同,而且都远大于我们所需要的1Hz的秒计数频率,所以RTCCLK进来,需要首先经过RTC预分频器进行分频,这个分频器由两个寄存器组成,上面这个是重装载寄存器RTC_PRL,下面这个,RTC_DN,手册里叫作余数寄存器,但实际上,这一块跟我们之前定时器时基单元里的计数器CNT和重装值ARR,是一样的作用,实际上还是计数器的作用,分频器其实就是一个计数器,计几个数溢出一次,那就是几分频,听以对于可编程的分频器来说,需要有两个寄存器,一个寄存器用来不断地计数,另一个寄存器,我们写入一个计数目标值,用来配置是几分频,那在这里,上面这个PRL,就是计数目标,我们写入6,那就是7分频,因为计数值包含了0,所以重装值写入几,就是几+1分频,然后下面这个DM,就是每来一个时钟计一个数的用途了,当然这个DI计数器,是一个自减计数器,每来一个输入时钟,DIV的值自减一次,自减到0时,再来一个输入时钟,DI输出一个脉冲,产生溢出信号,同时DI从PRL获取重装值,回到重装值继续自减

举个例子,比如RTCCLK输入时钟是32.768KHZ,即32768HZ,为了分频之后得到1Hz,PRL就要给32767,这个数值是始终不变的,DIV可以保持初始值为0,那在第一个输入时钟到来时,DIV就立刻溢出,产生溢出信号给后续电路,同时,DIV变为重装值32767,然后第二个输入时钟,DIV自减变为32766,一直这样,来一个输入时钟自减一次,直到变为0,然后再来一个输入时钟就会产生一个溢出信号,同时DIV回到32767,以此循环往复,这样的话,也就是每来32768个输入脉冲,计数器溢出一次,产生一个输出脉冲,这就是32768分频了,分频输出后的时钟频率是1HZ,提供给后续的秒计数器

然后看一下计数计时部分,32位可编程计数器RTC_CNT,就是计时最核心的部分,我们可以把这个计数器看作是Unix时间戳的秒计数器,这样借用time.h的函数,就可以很方便地得到年月日时分秒了,然后在下面部分这个RTC还设计的有一个闹钟寄存器RTC_ALR,这个ALR也是一个32位的寄存器,和上面这个CNT是等宽的,它的作用,顾名思义,就是设置闹钟,我们可以在ALR写一个秒数,设定闹钟,当CNT的值跟ALR设定的闹钟值一样时,也就是这里画的等号,如果它俩值相等就代表闹钟响了,这时就会产生RTC Alarm闹钟信号,通往右边的中断系统,在中断函数里,你可以执行相应的操作,同时,这个闹钟还兼具一个功能,就是下面这里的,闹钟信号可以让STM32退出待机模式,这个功能就可以对应一些用途,比如你设计一个数据采集设备,需要在环境非常恶劣的地方工作比如海底、高原、深井这些地方,然后要求是,每天中午12点采集一次环境数据,其他时间,为了节省电量,避免频繁换电池,芯片都必须处于待机模式,这样的话,我们就可以用这个RTC自带的闹钟功能,定一个中午12点的闹钟,闹钟一响,芯片唤醒,采集数据,完成后,继续待机,这样是不是就可以完成这个任务了,另外,这个闹钟值,是一个定值,只能响一次,所以如果你想卖现周期性的闹钟,那在每次响之后都需要再重新设置一下下一个闹钟时间,这就是这个闹钟和闹钟唤醒的一个用途

继续往右看就是中断部分了,在左边这里,有3个信号可以触发中断,第一个是RTC_Second秒中断,它的来源就是CNT的输入时钟,如果开启这个中断,那么程序就会每秒进一次RTC中断,第二个是RTC Overflow,溢出中断,它的来源,是CNT的右边,意思就是CNT的32位计数器计满溢出了,会触发一次中断,所以这个中断一般不会触发,这个CNT定义是无符号数,到2106年才会溢出,所以这个中断,在2106年会触发一次,如果你想程序更完善一些,可以开启这个中断,到2106年,计数器溢,为了避免不必要的错误,你可以让芯片罢工,然后提示当前设备过者,请及时更换,当然在2106年之后,这个STM32的RTC就不太好用了,到时候或许可以通过打补丁的方式继续运行,或者直接淘汰32位的时间戳,然后继续看,下面第三个RTC_Alarm,闹钟中断,刚才说过,当计数器和闹钟值相等时,触发中断,同时,闹钟信号可以把设备从待机模式唤醒

中断信号到右边这里这一块就是中断标志位和中断输出控制,这些F(Flag)结尾的是对应的中断标志位,IE(lnterrupt Enable)结尾的是中断使能,最后3个信号通过一个或门,汇聚到NVIC中断控制器

然后上面这部分APB1总线和APB1接口,就是我们程序读写寄存器的地方了,读写寄存器,可以通过APB1总线来完成,另外也可以看出,RTC是APB1总线上的设备

最后,下面这一块,退出待机模式,还有一个WKUP引脚,闹钟信号,和KUP(WeakUp)引脚,都可以唤醒设备,WKUP引脚可以看下接线图,就是PA0位置,它兼具唤醒的功能

5.RTC基本结构

最左边是RTCCLK时钟来源,这一块需要在RCC里配置,3个时钟,选择一个,当作RTCCLK,之后,RTCCLK先通过预分频器,对时钟进行分频,余数寄存器是一个自减计数器,存储当前的计数值,重装寄存器是计数目标,决定分频值,分频之后,得到1Hz的秒计数信号,通向32位计数器,一秒自增一次,下面还有一个32位的闹钟值,可以设置闹钟,如果不需要闹钟的话,下面这块可以不用管,然后右边有3个信号可以触发中断,分别是秒信号、计数器溢出信号和闹钟信号,三个信号先通过中断输出控制,进行中断使能,使能的中断才能通向NVIC,然后向CPU申请中断,在程序中我们配置这个数据选择器,可以选择时钟来源,配置重装寄存器,可以选择分频系数,配置32位计数器,可以进行目期时间的读写,需要闹钟的话,配置32位闹钟值即可,需要中断的话,先允许中断,再配置NVIC,最后写对应的中断函数即可

6.硬件电路

为了配合STM32的RTC,外部还是需要有一些电路的,在最小系统电路上,外部电路还要额外加两部分,第一部分就是备用电池,第二部分就是外部低速晶振,首先,备用电池供电部分,我这里给了两个参考电路,第一个是简单连接就是使用一个3V的电池,负极和系统共地,正极直接引到STM32的VBAT引脚,这个供电方案非常简单,在手册5.167供电方案这里,图上画的直接接一个1.8-3.6V的电池到VBAT就行了,另外也可以看到,在内部是有一个供电开关的,当VDD有电时,开关拨到下面由电路由VDD供电,当VDD没电时,开关拨到上面,后备电路由VBAT供电,然后VBT供电的设备,在这里写了VBAT供电的后备电路,有32KHZ振荡器。RTC,唤醒电路和后备寄存器,那这就是根据数据手册里,设计的VBAT供电方案

这里还给了第二种方案,是推荐连接,这种连接方法是电池,通过二极管D1,向VBAT供电,另外主电源的3.3V,也通过二极管D2,向VBAT供电,最后,VBAT再加一个0.1uF的电源滤波电容,这个供电方案的参考来源是STM32的参考手册,在这个4,1.2.电池备份区域这一节

综合这两条建议,我们可以设计出右边的推荐连接,电池和主电源都加一个二极管,防止电流倒灌,VBAT加一个0.1uF的电源滤波电容,0.1uF就是100nF,如果没有备用电池,就是3V3的主电源供电,如果接了备用电池,3V3没电时,就是备用电池供电,如果你只是进行实验,那使用左边的简单连接就行了,如果要画板子设计产品那还是推荐使用右边的连接,这样更保险

然后继续看一下右边的外部低速晶振部分,这就是一个典型的晶振电路了,这里X1是一个32.768KHZ的RTC晶振,这个昆振不分正负极,两端分别接在OSC32这两个引脚上,然后昆振两端,再分别接一个起振电容,到GND,这个电路的设计参考来源还是STM32的数据手册,在5.36外部时钟源特性这里有参考电路,使用一个晶体/陶瓷谐振器产生的低速外部时钟,对于CL1和CL2,建议使用高质量的5p~15pF之间的瓷介电容器,,,,,

这个备用电池,我们一般可以选择这样的3V纽扣电池,型号是CR2032,这是一个非常常用的纽扣电池型号,另外注意,这个纽扣电池印字的这一面是正极,另一面,比较小的那个电极是负极,然后32.768KHz的晶振,我们可以选择这样的一个金属壳桂状体的晶振,这个晶振也是比较常见,晶振的全称是石英晶体振荡器,所以我们常说的石英钟名称就来源于这样一个元件,最小系统板自带的有RTC晶振电路,这里这个黑色的元件,写的有32.768K,这个也是一种样式的RTC晶振,然后旁边这个金属壳柱状体,是8MHz的外部高速晶振

7.RTC操作注意事项

  • 执行以下操作将使能对BKP和RTC的访问:
    • 设置RCC APB1ENR的PWREN和BKPEN,I使能PWR和BKP时钟
    • 设置PWR CR的DBP,使能对BKP和RTC的访问
  • 若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC CRL寄存器中的RSF位(寄存器同步标志)被硬件置1(APB1时钟速度过快,RTC寄存器还没有更新到APB1总线上)
  • 必须设置RTC CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC PRL、RTC CNT、RTC ALR寄存器
  • 对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行可以通过查询RTC CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445926.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第5篇:DDOS病毒----应急响应之Linux实战篇

现象描述 某服务器网络资源异常,感染该木马病毒的服务器会占用网络带宽,甚至影响网络业务正常应用。 系统分析 针对日志服务器病毒事件排查情况: 在开机启动项/etc/rc.d/rc.local发现可疑的sh.sh脚本,进一步跟踪sh.sh脚本,这是一个检测病毒…

2024 kali系统2024版本,可视化界面汉化教程(需要命令行更改),英文版切换为中文版,基于Debian创建的kali虚拟机

我的界面如下所示 1. 安装 locales sudo apt install locales 2. 生成中文语言环境 sudo locale-gen zh_CN.UTF-8 如果你希望安装繁体中文,可以加入: sudo locale-gen zh_TW.UTF-8 3. 修改 /etc/default/locale 文件 确保有以下内容 LANGzh_CN.UT…

基于SpringBoot民宿预订系统小程序【附源码】

效果如下: 管理员登录界面 管理员功能界面 用户管理界面 房东管理界面 小程序首页界面 民宿房间界面 功能界面 研究背景 随着旅游业的蓬勃发展和人们对旅行体验的不断追求,民宿作为一种独特的住宿方式,因其个性化、温馨及富含地方特色的服务…

【自动驾驶汽车通讯协议】I2C(IIC)总线通讯技术详解

文章目录 0. 前言1. I2C简介2.I2C的工作原理2.1 硬件要求:2.2 半双工通信: 3. 通信时序4. 其他特性4.1 通信速率4.2 抗干扰措施4.3 注意事项 5. 在自动驾驶汽车中的应用5.1 I2C操作模式5.2 I2C的用途 6. 总结 0. 前言 按照国际惯例,首先声明&…

24.3 基于文件的服务发现模式

本节重点介绍 : 基于文件的服务发现提供了一种配置静态目标的更通用的方法可以摆脱对特定服务发现源的依赖通常的做法是调用内部CMDB的接口获取target数据,打上标签,生成json文件发给prometheus采集 基于文件的服务发现模式 解决的问题 之前手动配置…

数据结构-C语言顺序栈功能实现

栈 栈&#xff1a;类似于一个容器&#xff0c;如我们生活中的箱子&#xff0c;我们向箱子里放东西&#xff0c;那么最先放的东西是最后才能拿出来的 代码实现 #include <stdio.h> #include <stdlib.h>#define MAX_SIZE 100typedef struct {int* base; // 栈底指针…

工具篇-完整的 Git 项目管理工具教程(在命令框中使用 Git、在 IDEA 中使用 Git)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Git 概述 2.0 Git 的安装和配置 3.0 获取本地仓库 3.1 基础操作指令 3.2 分支 4.0 Git 远程仓库 4.1 创建远程仓库 4.2 配置 SSH 公钥 4.3 操作远程仓库 5.0 使用…

YOLO11改进|注意力机制篇|引入线性注意力机制FLAttention

目录 一、【FLA】注意力机制1.1【FLA】注意力介绍1.2【FLA】核心代码 二、添加【FLA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【FLA】注意力机制 1.1【FLA】注意力介绍 下图是【FLA】的结构图&#xff0c;让我们简单分…

探索Spring Cloud Config:构建高可用的配置中心

目录 认识Spring Cloud ConfigConfig Server读取配置文件步骤1&#xff1a;&#xff08;1&#xff09;创建config-server项目&#xff08;2&#xff09;在config-server中开启Config Server功能&#xff08;3&#xff09;在config-server配置文件进行相关配置&#xff08;4&…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

数据结构-5.5.二叉树的存储结构

一.二叉树的顺序存储&#xff1a; a.完全二叉树&#xff1a; 1.顺序存储中利用了静态数组&#xff0c;空间大小有限&#xff1a; 2.基本操作&#xff1a; (i是结点编号) 1.上述图片中i所在的层次后面的公式应该把n换成i(图片里写错了)&#xff1b; 2.上述图片判断i是否有左…

如何针对项目中的技术难点准备面试?——黑马点评为例

最核心的&#xff0c;包装和准备 个人项目&#xff0c;怎么包装&#xff1f;一定要写出代码才可以吗&#xff1f; 你可以在系统A中实现就可以&#xff0c;了解其中实现的细节&#xff0c;怎么跟面试官对线等等&#xff0c;这些话术到位了之后&#xff0c;再把它融入到系统B&a…

echarts 入门

工作中第一次碰到echarts&#xff0c;当时有大哥。二进宫没办法&#xff0c;只能搞定它。 感觉生活就是这样&#xff0c;不能解决的问题总是会反复出现。通过看视频、查资料&#xff0c;完成了工作要求。写一篇Hello World&#xff0c;进行备查。 基本使用 快速上手 <!DO…

探索Theine:Python中的AI缓存新贵

文章目录 探索Theine&#xff1a;Python中的AI缓存新贵背景&#xff1a;为何选择Theine&#xff1f;Theine是什么&#xff1f;如何安装Theine&#xff1f;简单的库函数使用方法场景应用场景一&#xff1a;Web应用缓存场景二&#xff1a;分布式系统中的数据共享场景三&#xff1…

【亲测可行】ubuntu根目录空间不够,将其它盘挂载到/opt

文章目录 &#x1f315;缘起&#x1f315;从其它盘压缩出一个未分配的空间&#x1f319;从windows系统中压缩出个未分配的空间&#x1f319;从linux系统中压缩出个未分配的空间 &#x1f315;右键点击未分配的盘新建分区&#x1f315;查看分区&#x1f315;先将新分区挂载到/mn…

基于SpringBoot+Vue+Uniapp的仓库点单小程序的详细设计和实现

2. 详细视频演示 文章底部名片&#xff0c;联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行效果图 代码运行效果图 代码运行效果图 代码运行效果图代码运行效果图 代码运行效果图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发…

计算机网络(十一) —— 数据链路层

目录 一&#xff0c;关于数据链路层 二&#xff0c;以太网协议 2.1 局域网 2.2 Mac地址 2.3 Mac帧报头 2.4 MTU 三&#xff0c;ARP协议 3.1 ARP是什么 3.2 ARP原理 3.3 ARP报头 3.4 模拟ARP过程 3.5 ARP周边问题 四&#xff0c;NAT技术 4.1 NAT技术背景 4.2 NAT转…

图像分类-demo(Lenet),tensorflow和Alexnet

目录 demo(Lenet) 代码实现基本步骤&#xff1a; TensorFlow 一、核心概念 二、主要特点 三、简单实现 参数: 模型编译 模型训练 模型评估 Alexnet model.py train.py predict.py demo(Lenet) PyTorch提供了一个名为“torchvision”的附加库&#xff0c;其中包含…

GC1262E替代APX9262S/茂达芯片在笔记本和显卡风散热风扇中的应用分享

随着移动计算和高性能图形处理技术的不断进步&#xff0c;笔记本电脑和显卡的散热需求日益增加。散热风扇作为关键组件&#xff0c;其控制芯片的选择对系统性能和用户体验有着直接影响。本文将探讨芯麦的GC1262E芯片如何替代APX9262S/茂达芯片&#xff0c;应用于笔记本和显卡的…

ScriptableObject基本使用

使用方法 自定义类继承ScriptableObject 可以在类内部增加数据或者数据类&#xff0c;一般用于配置 注意事项 给继承ScriptableObject的类增加CreateAssetMenu特性。 CreateAssetMenu一般默认三个参数 第一个参数是父目录 第二个参数是父目录的子选项 第三个参数是可以…