RTC实时时钟原理+BKP寄存器
RTC (Real Time Clock):实时时钟
RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。
RTC特征
RTC工作原理框图
RTC由两部分组成:
APB1接口:用来和APB1总线相连。通过APB1接口可以访问RTC的相关寄存器(预分频值,计数器值,闹钟值)。
RTC核心:由一组可编程计数器组成。分两个主要模块。
第一个是RTC预分频模块,它可以编程产生最长1秒的RTC时间基TR_CLK。如果设置了秒中断允许位,可以产生秒中断。
第二个是32位的可编程计数器,可被初始化为当前时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比,当匹配时候如果设置了闹钟中断允许位,可以产生闹钟中断。
====================================================================
BKP备份寄存器
1.备份寄存器是42个16位的寄存器。可用来存储84个字节数据,常用来保存一些系统配置信息和相关标志位。
2.它们处在备份区域,当VDD电源切断,仍然由VBAT维持供电。
3.当系统在待机模式下被唤醒,或者系统复位或者电源复位,它们也不会复位。
4.执行以下操作将使能对后备寄存器和RTC访问:
(1)设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备时钟。
(2)设置寄存器PWR_CR的DBP位,使能对RTC和后备寄存器的访问。
====================================================================
RTC相关库函数
RTC时钟源和时钟操作函数:
RCC_LSEConfig();//开启LSE晶振
void RCC_RTCCLKConfig(uint32_t CLKSource);//时钟源选择
void RCC_RTCCLKCmd(FunctionalState NewState)//时钟使能
RTC配置函数(预分频,计数值,闹钟值):
void RTC_SetPrescaler(uint32_t PrescalerValue);//预分频配置:PRLH/PRLL
void RTC_SetCounter(uint32_t CounterValue);//设置计数器值:CNTH/CNTL
void RTC_SetAlarm(uint32_t AlarmValue);//闹钟设置:ALRH/ALRL
RTC中断设置函数:
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//CRH
RTC允许配置和退出配置函数:
void RTC_EnterConfigMode(void);//允许RTC配置 :CRL位 CNF
void RTC_ExitConfigMode(void);//退出配置模式:CRL位 CNF
同步函数:
void RTC_WaitForLastTask(void);//等待上次操作完成:CRL位RTOFF
void RTC_WaitForSynchro(void);//等待时钟同步:CRL位RSF
相关状态位获取清除函数:
FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
void RTC_ClearFlag(uint16_t RTC_FLAG);
ITStatus RTC_GetITStatus(uint16_t RTC_IT);
void RTC_ClearITPendingBit(uint16_t RTC_IT);
其他相关函数(BKP等)
PWR_BackupAccessCmd();//BKP后备区域访问使能
RCC_APB1PeriphClockCmd();//使能PWR和BKP时钟
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);//读BKP寄存器
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);//写BKP
====================================================================
RTC配置一般步骤:
使能PWR和BKP时钟:RCC_APB1PeriphClockCmd();
使能后备寄存器访问: PWR_BackupAccessCmd();
配置RTC时钟源,使能RTC时钟:
RCC_RTCCLKConfig();
RCC_RTCCLKCmd();
如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);设置RTC预分频系数:RTC_SetPrescaler();
设置时间:RTC_SetCounter();
开启相关中断(如果需要):RTC_ITConfig();
编写中断服务函数:RTC_IRQHandler();
部分操作要等待写操作完成和同步。
RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成
RTC_WaitForSynchro(); //等待RTC寄存器同步
①修改CRH/CRL寄存器,必须先判断RSF位,确定已经同步。
②修改CNT,ALR,PRL的时候,必须先配置CNF位进入配置模式,修改完之后,设置CNF位为0退出配置模式
③同时在对RTC相关寄存器写操作之前,必须判断上一次写操作已经结束,也就是判断RTOFF位是否置位。
等待上一次写操作完成
判断同步
进入配置模式
修改RTC相关寄存器(每次写操作都必须等待上一次写操作完成)
退出配置模式
等待上一次写操作完成
RTC实时时钟原理+BKP寄存器相关推荐
- STM32——RTC实时时钟原理+BKP寄存器原理
一.RTC实时时钟特征与原理 1.RTC(Real Time Clock):实时时钟 2.RTC是个独立的BCD定时器/计数器.RTC提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性 ...
- 嵌入式--RTC实时时钟原理及相关库函数功能
一.RTC实时时钟原理 1.RTC实时时钟是一个独立的定时器,可以提供日期时间或者闹钟的功能.其核心是通过32位可编程计数器RTC_CNT计数来进行时间配置. 2.图1中RTCCLK为RTC时钟源,其 ...
- 【STM32】RTC实时时钟概述、寄存器、库函数(RTC一般步骤)
STM32F1xx官方资料: <STM32中文参考手册V10>-第16章 实时时钟(RTC) RTC实时时钟 RTC实时时钟简介 实时时钟是一个独立的定时器.RTC模块拥有一组连续计数的 ...
- STM32:RTC实时时钟原理
RTC (Real Time Clock):实时时钟 RTC是个独立的BCD定时器/计数器.RTC 提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志.RTC还包含用于管 ...
- RTC实时时钟(学习笔记)
RTC实时时钟特征与原理 RTC(Real Time Clock):实时时钟. RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可 ...
- stm32f4 RTC实时时钟解析
RTC是什么–简介 RTC,英文全称:Real-time clock,中文名称:实时时钟,是指可以像时钟一様输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片.实时时钟芯片是日常生活中应用最 ...
- 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...
- 十九、RTC实时时钟
一..RTC实时时钟工作框图 RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连.此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作.APB1 接口 ...
- STM32之RTC实时时钟
RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运 ...
最新文章
- public-private-protected-默认缺省 的区别
- C代码开发遇到的问题 变量初始化和结构体指针移动
- 数据结构实验六 综合数据处理
- P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题(2022.02.02) --- python3实现
- 如何做性能测试的一点思考总结
- Windows Phone 实用开发技巧(18):使用SystemTray显示全局消息提醒
- 条件注释判断兼容浏览器版本CSS HACK !--[if !IE]!--[if IE]!--[if lt IE 6]!--[if gte IE 6]...
- 1.程序员的自我修养---简介
- nginx location 斜杠_斜杠青年 菲斯塔车主实录
- android 设置editext只能输入数字
- linux 设备模型详解,Linux2.6 设备模型之input子系统详解
- python里print字符串+字符串_python 字符串 和 print
- 北斗卫星导航定位系统应用及发展前景
- web前端学习第三周
- wpsa3版面怎么变成a4、排版不变_worda3变a4排版打印 word如何将a3排版成a4
- android 音视频录制
- java小型计费系统设计_JAVA课程设计模拟电信计费系统
- 在Linux上搭建一个自己的网站
- 计算机应用系特色活动,职教桥:用匠心打造计算机应用专业特色课程体系
- CloudCompare学习记录(一)主要概念
热门文章
- 嵌入式学习:裸机开发_L4_官方SDK开发LED实验
- 文件包含漏洞及漏洞利用
- 食物语服务器什么时候维护,食物语无法登录游戏怎么办_食物语无法登录游戏解决方法介绍_游戏吧...
- 橙单微服务的权限部分之过滤规则
- PC和开发板之间传输文件
- 0 0 0 ’\0’ 区别
- python需要cpu还是显卡问题_如果研究深度学习方向,是CPU更重要还是显卡更重要?...
- pandas使用to_datetime函数将时间字符串转化为时间对象、使用dt.tz_localize为转化后的时间对象添加时区信息(timezone)
- vue导入excel进度条_纯前端 vue+ js-xlsx 导入excel表格
- vue导出excel加一个进度条_运用vue导出excel碰到的那些坑