BKP备份寄存器和实时时钟笔记

BKP(Backup Registers)备份寄存器

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

BKP基本结构 

 BKP控制寄存器用来备份、管理侵入检测和RTC校准功能 

开启代码

/*备份寄存器访问使能*/
PWR_BackupAccessCmd(ENABLE);		//使用PWR开启对备份寄存器的访问

RTC(Real Time Clock)实时时钟

特点
  1. RTC是一个独立的定时器,可为系统提供时钟和日历的功能
  2. RTC和时钟配置系统处于后备区域,系统复位时数据不清零,                                          VDD(2.0~3.6V)断电后可借助VBAT(1.8~3.6V)供电继续走时
  3. 32位的可编程计数器,可对应Unix时间戳的秒计数器
  4. 20位的可编程预分频器,分频系数最高为 2^{20}可适配不同频率的输入时钟
  5. 3 个专门的可屏蔽中断:
    闹钟中断,用来产生一个软件可编程的闹钟中断。
    秒中断,用来产生一个可编程的周期性中断信号 ( 最长可达 1 )
    溢出中断,指示内部可编程计数器溢出并回转为 0 的状态。
  6. 可选择三种RTC时钟源:   
  •  HSE时钟除以128(通常为8MHz/128)   
  •  LSE振荡器时钟(通常为32.768KHz)   
  •  LSI振荡器时钟(40KHz) 
       实时时钟是一个独立的定时器。 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 
        RTC 模块和时钟配置系统 (RCC_BDCR 寄存器 ) 处于后备区域,即在系统复位或从待机模式唤醒 后,RTC 的设置和时间维持不变。
        系统复位后,对后备寄存器和 RTC 的访问被禁止,这是为了防止对后备区域 (BKP) 的意外写操作。
注意 

RTC虽然有三种时钟源,不过只能选 LSE 时钟,因为只有它才能起到断电后会借助VBAT供电

 执行以下操作将使能对后备寄存器和RTC的访问:

  • 设置寄存器RCC_APB1ENRPWRENBKPEN位,使能电源和后备接口时钟
  • 设置寄存器PWR_CRDBP位,使能对后备寄存器和RTC的访问。

RTC框图

 RTC由两个主要部分组成 

APB1 接口:
       用来和 APB1 总线相连。 此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口由 APB1 总 线时钟驱动,用来与 APB1 总线连接。
      通过APB1接口可以访问RTC的相关寄存器(预分频值,计数器值,闹钟值)。
RTC  核心: 

 由一组可编程计数器组成,分成两个主要模块。

  1. 第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLKRTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。
  2. 第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间。                              (闹钟)系统时间TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。(闹钟只能实现一次,然后想要设置周期性,必须每次响后重新设置)

RTC_Second为秒中断,用于刷新时间,
RTC_Overflow是溢出中断。
RTC Alarm 控制开关机

RTC简化结构 

RTC操作注意事项 

1、执行以下操作将使能对BKP和RTC的访问:

  • 设置RCC_APB1ENR的PWREN和BKPEN,使能PWR和BKP时钟     
  • 设置PWR_CR的DBP,使能对BKP和RTC的访问

2、若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待 RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1(库函数RTC等待同步

3、必须设置 RTC_CRL 寄存器中的 CNF 位,使 RTC 进入配置模式后,才能写入 RTC_PRL、RTC_CNT、RTC_ALR寄存器

4、对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器 (调用一个等待函数

 开启代码 

/*** 函    数:RTC初始化* 参    数:无* 返 回 值:无*/
void MyRTC_Init(void)
{/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);		//开启PWR的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);		//开启BKP的时钟/*备份寄存器访问使能*/PWR_BackupAccessCmd(ENABLE);					//使用PWR开启对备份寄存器的访问if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)	//通过写入备份寄存器的标志位,判断RTC是否是第一次配置//if成立则执行第一次的RTC配置{RCC_LSEConfig(RCC_LSE_ON);							//开启LSE时钟while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET);	//等待LSE准备就绪RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);			//选择RTCCLK来源为LSERCC_RTCCLKCmd(ENABLE);							//RTCCLK使能RTC_WaitForSynchro();							//等待同步RTC_WaitForLastTask();							//等待上一次操作完成RTC_SetPrescaler(32768 - 1);			//设置RTC预分频器,预分频后的计数频率为1HzRTC_WaitForLastTask();								//等待上一次操作完成MyRTC_SetTime();		    //设置时间,调用此函数,全局数组里时间值刷新到RTC硬件电路BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);		//在备份寄存器写入自己规定的标志位,用于判断RTC是不是第一次执行配置}else								//RTC不是第一次配置{RTC_WaitForSynchro();							//等待同步RTC_WaitForLastTask();							//等待上一次操作完成}
}

如果LSE无法起振导致程序卡死在初始化函数中,
可将初始化函数替换为下述代码,使用LSI当作RTCCLK
LSI无法由备用电源供电,故主电源掉电时,RTC走时会暂停

void MyRTC_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);PWR_BackupAccessCmd(ENABLE);if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5){RCC_LSICmd(ENABLE);while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) != SET);RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);RCC_RTCCLKCmd(ENABLE);RTC_WaitForSynchro();RTC_WaitForLastTask();RTC_SetPrescaler(40000 - 1);RTC_WaitForLastTask();MyRTC_SetTime();BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);}else{RCC_LSICmd(ENABLE);				//即使不是第一次配置,也需要再次开启LSI时钟while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) != SET);RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);RCC_RTCCLKCmd(ENABLE);RTC_WaitForSynchro();RTC_WaitForLastTask();}
}

硬件电路

以后自己画板子,此电路是个不错备份参考电路

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式使用简例(简单工厂+策略模式+模板方法)

直接上代码,方便记忆。主要的要点,已经写到注释中。 一,代码展示 启动类 package com.rojer;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootAppli…

华为机试HJ108求最小公倍数

华为机试HJ108求最小公倍数 题目: 想法: 要找到输入的两个数的最小公倍数,这个最小公倍数要大于等于其中最大的那个数值,遍历最大的那个数值的倍数,最大的最小公倍数就是输入的两个数值的乘积 input_number_list i…

读书笔记-Java并发编程的艺术-第4章(Java并发编程基础)-第3节(线程间通信)

文章目录 4.3 线程间通信4.3.1 volatile和synchronized 关键字4.3.2 等待/通知机制4.3.3 等待/通知的经典范式4.3.4 管道输入 / 输出流4.3.5 Thread.join()的使用4.3.6 ThreadLocal的使用 4.3 线程间通信 线程开始运行,拥有自己的栈空间,就如同一个脚本…

斯坦福大学博士在GitHub发布的漫画机器学习小抄,竟斩获129k标星

斯坦福大学数据科学博士Chris Albon在GitHub上发布了一份超火的机器学习漫画小抄,发布仅仅一天就斩获GitHub榜首标星暴涨120k,小编有幸获得了一份并把它翻译成中文版本,今天给大家分享出来! 轻松的画风配上让人更容易理解的文字讲…

【深度学习基础】环境搭建 Linux报错bash: conda: command not found...

目录 一、 问题描述二、 解决方法1. 在.bashrc文件中添加环境变量2. 卸载重装anconda 三、总结 一、 问题描述 在linux环境下安装anaconda时候报错:bash: conda: command not found… 二、 解决方法 1. 在.bashrc文件中添加环境变量 参考链接:【解决】…

打开ps提示dll文件丢失如何解决?教你几种靠谱的方法

在日常使用电脑过程中,由于不当操作,dll文件丢失是一种常见现象。当dll文件丢失时,程序将无法正常运行,比如ps,pr等待软件。此时,我们需要对其进行修复以恢复其功能,下面我们一起来了解一下出现…

window.matchMedia

matchMedia() 返回一个新的 MediaQueryList 对象,表示指定的媒体查询字符串解析后的结果。 const width ref(); const myFunction (x) > {if (x.matches) {// 媒体查询document.body.style.backgroundColor "yellow";width.value "yellow&quo…

氛围感视频素材高级感的去哪里找啊?带氛围感的素材网站库分享

亲爱的创作者们,大家好!今天我们来聊聊视频创作中至关重要的一点——氛围感。一个好的视频,不仅要有视觉冲击力,还要能够触动观众的情感。那我们应该去哪里寻找这些充满氛围感且高级的视频素材呢?别急,我这…

解答 | http和https的区别,谁更好用

TTP(超文本传输协议)和HTTPS(安全超文本传输协议)的主要区别在于安全性和数据传输的方式。 一、区别 1、协议安全性: HTTP:使用明文形式传输数据,不提供数据加密功能,数据在传输过…

数字信号处理教程(3)——z变换

在连续时间域中的每一种分析方法,在离散时间域中想必也能得到对应一种分析方法。连续傅里叶变换对应着离散傅里叶变换(DFT),而在拉普拉斯变换则是对应着z变换。z变换能够将信号表示成离散复指数函数的线性组合。连续傅里叶变换可以…

Java如何自定义注解及在SpringBoot中的应用

注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说…

搜维尔科技:OptiTrack在NAB2024展示了一系列业界领先的媒体技术

广泛的显示和动作捕捉跟踪技术组合涵盖无与伦比的室内和室外 LED 解决方案、前沿技术演示以及最新的软件和硬件产品 可视化技术领域的全球领导者 Planar及其附属公司 3D 跟踪系统的全球领导者OptiTrack宣布,两家公司将在 2024 年全国广播协会 (NAB) 展会上展示其最全…

Studying-代码随想录训练营day34| 62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树

第34天,动态规划part02,牢记五部曲步骤,编程语言:C 目录 62.不同路径 63.不同路径II 343.整数拆分 96.不同的二叉搜索树 总结 62.不同路径 文档讲解:代码随想录不同路径 视频讲解:手撕不同路径 题目…

接口测试(3)

接口自动化 # 获取图片验证码import requestsresponse requests.get(url"http://kdtx-test.itheima.net/api/captchaImage")print(response.status_code) print(response.text) import requestsurl "http://kdtx-test.itheima.net/api/login" header_da…

爱情和友情触动人心

在这个纷繁复杂的娱乐圈里,爱情与友情的故事总是能触动人心,而“于适前女友包场于适新电影”的新闻,无疑为这个充满故事的舞台又添上了一抹温暖的色彩。这不仅仅是一场电影的包场,更是一段超越常规情感的展现,不禁感叹…

网络安全——防御实验

防御实验一 拓扑结构展示: 一、 根据题目,先为办公区做安全策略主要策略有以下几点: 1、书写名称和描述,名称和描述要明确,让除本人以外的人也能理解 2、确定源地址为办公区,目标地址为DMZ区 3、确定时间…

Xilinx zc706 USB电路解析

作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 USB OTG检测原理 USB3320 USB_ID为低电平时候,为host模式,USB_ID为悬空(高…

锅总反驳李彦宏说的“不要卷模型,要卷应用”

李彦宏的观点是大家不要卷模型,要卷应用,但我认为这种看法是荒谬的。以下是24条反驳李彦宏观点的论点和论据: 模型的准确性直接决定应用的质量和用户体验: 论据:在自然语言处理、计算机视觉等领域,模型的准…

哦华为仓颉语言

本来我不太想说的,奈何有不少粉丝提问提到了这语言,目前的情况我不透露太多,看过这课程C实现一门计算机编程语言到手撸虚拟机实战的懂的自然懂。 在互联网领域几乎大部分应用软件运行在X86 LINUX上居多,如果你有问题可以先学习这…

C++入门基础(2)

目录 一、引用: 1、定义: 2、特性: 3、引用的使用: 4、const引用:控制权限 const引用定义: const引用可以接收3种对象: 1、正常对象: 2、临时对象: 3、const对象: 总结&…