一、什么是RTC
RTC(Real-time Clock):实时时钟,本质上是一个支持BCD编码的定时器/计数器。主电源断电后能够由电池供电,使其时钟跳转依然正常。
二、STM32F4芯片内的RTC功能
①日历时钟(时分秒、年月日、星期)
②两个闹钟——闹钟动作出发可支持中断
③定时唤醒功能(周期性唤醒)
④自动唤醒
⑤可以使用数字校准功能对晶振精度的偏差进行补偿。
⑥上电复位后,所有RTC寄存器都会受到保护,以防止可能的非正常写访问。
三、官方文档
1、RTC框图

LSE配置——RCC配置
异步通道分频器:1-128分频(RTC_PRER)
同步通道分频器:1-256分频(RTC_PRER)
日历寄存器:RTC_TR(时间寄存器),RTC_DR(日期寄存器)
RTC_SSR本质上是一个递减计数器:辅助更新日历
2、RTC初始化和配置(官方文档截取)
3、日历初始化配置

四、总结
1、RTC的寄存器属于后备区域——电池供电可继续工作,RTC内有20个后备寄存器
2、不是所有RTC寄存器都有写保护
默认无写保护的RTC寄存器:RTC_ISR[13:8]位、RTC_TAFCR、RTC_BKPxR(20个)。
其他RTC寄存器想要解除写保护需要:
①PWR使能
②开启后备区域访问权限
③通过向RTC_WPR写入指定密钥“0xCA”“0x53”
3、影子寄存器:SSR TR DR
RTC本身有这些寄存器,但是他们有写保护,所以每次想读取时间太麻烦,给这些RTC内的时间、日期、亚秒寄存器设置一个备份(在普通APB1外设),不用管写保护问题,直接访问即可。
五、RTC编程
1、读取RTC备份寄存器
RTC_ReadBackupRegister(RTC_BKP_DR0) == 0x32F2
2、开始第一次配置RTC
①使能PWR时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);//开启后备寄存器区域访问

使能RTC时钟

RCC_LSEConfig(RCC_LSE_ON);//开启外部低速晶振
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);//等待LSE稳定就
绪
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RCC中选择LSE作为RTC时钟
RCC_RTCCLKCmd(ENABLE);//使能RTC时钟不管你是LSI 还是LSE
RTC_WaitForSynchro();//等待寄存器同步标志位置位

②RTC配置
同步和异步分频系数(RTC_PRER)和时制(12/24)

RTC_Init(&RTC_InitStructure);

③设置日期

RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);

④设置时间

RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);

⑤写入备份寄存器一个独特的标志值,用来区分是否是第一次初始化RTC

RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);

六、示例代码

void RTC_Config(void)
{RTC_InitTypeDef RTC_InitStructure;RTC_DateTypeDef RTC_DateStructure;RTC_TimeTypeDef RTC_TimeStructure;//读取备份区域的寄存器  看看是否是第一次初始化if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x1224){//第一次初始化//1-使能PWR时钟 和RTC时钟配置RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);PWR_BackupAccessCmd(ENABLE);//PWR_CR---DBP//       RCC_LSEConfig(RCC_LSE_ON);//开启LSE晶振
//      while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==0);//等待LSE稳定就绪
//      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RCC中选择LSE作为RTC时钟
//      RCC_LSICmd(ENABLE);/* Wait till LSI is ready */  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET){}/* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);RCC_RTCCLKCmd(ENABLE);//使能RTC时钟不管你是LSI 还是LSERTC_WaitForSynchro();//等待寄存器同步标志位置位 ISR--RSF//2-初始化RTCRTC_InitStructure.RTC_AsynchPrediv = 128-1;//异步分频系数 0x00~0x7FRTC_InitStructure.RTC_SynchPrediv  = 256-1;//同步分频系数 0x00~0x7FFFRTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//24RTC_Init(&RTC_InitStructure);//3-设置日期RTC_DateStructure.RTC_Year  = 0x21;//21年RTC_DateStructure.RTC_Month = 0x09;//9月RTC_DateStructure.RTC_Date  = 0x14;//14号RTC_DateStructure.RTC_WeekDay = 0x02;//周二RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);//4-时间设置  时分秒  16:06:00RTC_TimeStructure.RTC_Hours = 0x16;RTC_TimeStructure.RTC_Minutes = 0x06;RTC_TimeStructure.RTC_Seconds = 0x00;RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);   RTC_WriteBackupRegister(RTC_BKP_DR0,0x1224);}else{RCC_LSICmd(ENABLE);/* Wait till LSI is ready */  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET){}/* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);if(RCC_GetFlagStatus(RCC_FLAG_PINRST) == 1){PFout(10)= 1;//亮第二盏灯delay_s(1);//表示复位按键按下 复位PFout(10)= 0;//亮第二盏灯}//非第一次执行此初始化if(RCC_GetFlagStatus(RCC_FLAG_PORRST) == 1){PFout(9)= 1;//亮第二盏灯delay_s(1);//表示上电复位PFout(9)=0;//亮第一盏灯RCC_ClearFlag();}//只要使能后备区域访问 和 等待影子寄存器同步RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);PWR_BackupAccessCmd(ENABLE);//PWR_CR---DBPRTC_WaitForSynchro();//等待寄存器同步标志位置位 ISR--RSF}
}

【STM32】详解RTC实时时钟的概念和配置示例代码相关推荐

  1. python修改html内容_详解Python利用Beautiful Soup模块修改内容示例代码

    Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python 库.它能够通过你喜欢的转换器实现惯用的文档导航.查找.修改文档的方式.他还能够修改HTML/XML文档的内容.这篇 ...

  2. 【正点原子STM32连载】 第二十七章 RTC实时时钟实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  3. STM32之RTC实时时钟

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

  4. 【STM32】RTC实时时钟概述、寄存器、库函数(RTC一般步骤)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第16章  实时时钟(RTC) RTC实时时钟 RTC实时时钟简介 实时时钟是一个独立的定时器.RTC模块拥有一组连续计数的 ...

  5. stm32零星笔记(一)——sysTick滴答计时器、RTC实时时钟

    目录 什么是sysTick.RTC 关于时钟树 功能 延时 阻塞延时 非阻塞延时的一种近似实现 秒中断 日历与时间 RTC(Real Time Clock,实时时钟) 日期掉电保持 什么是sysTic ...

  6. STM32学习笔记(十九)RTC实时时钟实验

    STM32F103ZET6之RTC实时时钟实验 文章目录 STM32F103ZET6之RTC实时时钟实验 前言 一.简介 二.相关寄存器及配置过程 三.程序源码 1.rtc.h 2.rtc.c 3.m ...

  7. STM32——RTC实时时钟原理+BKP寄存器原理

    一.RTC实时时钟特征与原理 1.RTC(Real Time Clock):实时时钟 2.RTC是个独立的BCD定时器/计数器.RTC提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性 ...

  8. STM32详解一startup_stm32f10x_hd_vl(超值类型STM32F100xx)和startup_stm32f10x_hd(大容量的STM32F101xx,STM32F102xx,S)

    STM32详解一 转载w282529350 最后发布于2013-12-09 14:31:06 阅读数 8413  收藏 展开 STM32详解1 一.在进入主题之前我们先了解一些必要的基础知识----s ...

  9. Exynos4412裸机开发 —— RTC 实时时钟单元

    RTC(Real-Time Clock) 实时时钟.RTC是集成电路,通常称为时钟芯片.在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能 ...

最新文章

  1. 【camera-radar】自动驾驶相机-毫米波雷达融合方案综述
  2. 小数加分数怎样计算讲解_2020人教版三年级下册数学知识点汇总带视频讲解,让孩子在学习!...
  3. 嫌Terminal终端太单调?快收下这几个有趣的改造工具!
  4. mysql主备模型,MySQL数据同步【双主热备】
  5. 死猪脑”能复活吗?---评美国耶鲁大学医学院实验研究
  6. keras实现简单lstm_四十二.长短期记忆网络(LSTM)过程和keras实现股票预测
  7. ERROR: Could not read unit serial number!
  8. 2012服务器系统安装iis,Windows Server 2012服务器管理系统安装配置IIS8.5教程
  9. pythonencode和decode_Python3的decode()与encode()
  10. 03-neo4j的命令
  11. django mysql 修改密码_Django更改sqlite数据库使用mysql数据库 - 李金龙
  12. 每日算法系列【LeetCode 386】字典序排数
  13. javascript释放对象_一文深入理解JavaScript如何运作
  14. 银盛支付银账通进件接口php demo 签名 上传图片 进件 获取token 超简洁sdk
  15. 强烈推荐一个有情怀的跨平台Redis可视化客户端工具:RedisViewer
  16. postman小技巧-提取变量及设置变量
  17. 添加打印机其它计算机打不开,windows无法打开添加打印机的解决方法
  18. 魔兽争霸3冰封王座十大经典战役全集
  19. 7针oled显示中文及图片arduino。ug8lib
  20. 小心肝队-冲刺日志(第五天)

热门文章

  1. Excel2019关闭时无响应
  2. Arduino超声波传感器使用
  3. ThingJS技术分享:建筑建模常用软件一览 3D 可视化
  4. die、exit()和return区别
  5. 星云日记是什么?流量共享,一键解决卖货难题
  6. 梦幻西游唯美版3D模型展示
  7. Matlab sum( ) 函数
  8. 32位系统的虚拟内存空间最大容量
  9. 用Kubernetes部署超级账本Fabric的区块链即服务
  10. CSP初赛基础知识整理