一、RTC介绍

RTC(Real Time Clock):实时时钟。
RTC是个独立的BCD定时器/计数器。RTC 提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC还包含用于管理低功耗模式的自动唤醒单元。两个32位寄存器包含二进码十进制格式(BCD)的秒,分钟,小时(12或24小时制),星期几,日期,月份和年份。此外,还可以提供二进制的亚秒值。系统可以自动将月份的天数补偿为28,29(闰年),30,31天。上电复位后,所有的RTC寄存器都会受到保护,以防止可能的非正常写访问。RTC模块和时钟配置是在后备区域,即在系统复位或者待机模式唤醒后RTC的设置和时间维持不变,只要后备区域供电正常,RTC将一直工作下去。但是在系统复位之后会自动禁止访问后备区域和RTC,以防止意外操作,所以在设置时间之前,要先取消后备区域写保护。
二、RTC工作原理框图

其中:最左侧为时钟输入,可由LSE、HSE以及LSI输入,经过RTC_PRER(默认值为128)进行分频,获得时钟为256Hz,再进过第二个RTC_PRER(默认值为256)进行分频,获得时钟1Hz。1Hz用来给秒计时,256Hz充当亚秒计时。闹钟A和闹钟B通过判断器和RTC_TR以及RTC_DR来比较,实现闹钟。下方有自动唤醒的时钟以及寄存器。

二、RTC相关常用寄存器

RTC预分频寄存器(RTC_PRER)

RTC时间寄存器(RTC_TR)

RTC日期寄存器(RTC_DR)

RTC亚秒寄存器(RTC_SSR)

RTC唤醒定时器寄存器(RTC_WUTR)

RTC闹钟A/B寄存器(RTC_ALRMAR/RTC_ALRMBR)

RTC闹钟A/B亚秒寄存器(RTC_ALRMASSR/ RTC_ALRMBSSR)
RTC写保护寄存器(RTC_WPR)

三、RTC相关库函数讲解

RTC时钟源和时钟操作函数:

void RCC_RTCCLKConfig(uint32_t  CLKSource);//时钟源选择
void RCC_RTCCLKCmd(FunctionalState NewState)//时钟使能

RTC初始化函数:

ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct);
typedef struct
{ uint32_t RTC_HourFormat;   //小时格式:24/12uint32_t RTC_AsynchPrediv;  //异步分频 系数uint32_t RTC_SynchPrediv; //同步分频系数
}RTC_InitTypeDe

RTC日历配置相关函数:

 ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct);void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct);ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct);void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct);uint32_t RTC_GetSubSecond(void);

RTC闹钟相关函数:

ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState)
void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm,   RTC_AlarmTypeDef* RTC_AlarmStruct);
void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct);
void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue, uint32_t RTC_AlarmSubSecondMask)
uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm);

RTC周期唤醒相关函数:

void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock);
void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter);
uint32_t RTC_GetWakeUpCounter(void);
RTC_WakeUpCmd(DISABLE);//关闭WAKE UP

RTC中断配置以及状态相关函数:

void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState);
FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG);
void RTC_ClearFlag(uint32_t RTC_FLAG);
ITStatus RTC_GetITStatus(uint32_t RTC_IT);
void RTC_ClearITPendingBit(uint32_t RTC_IT);

RTC相关约束函数:

 void RTC_WriteProtectionCmd(FunctionalState NewState);//取消写保护ErrorStatus RTC_EnterInitMode(void);//进入配置模式,RTC_ISR_INITF位设置为1void RTC_ExitInitMode(void)//退出初始化模式。

其他相关函数:

uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR);
void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data)
void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState);

四、RTC日历配置一般步骤

  • ①使能PWR时钟:
RCC_APB1PeriphClockCmd();
  • ② 使能后备寄存器访问: `
 PWR_BackupAccessCmd();`
  • ③ 配置RTC时钟源,使能RTC时钟:
 RCC_RTCCLKConfig();RCC_RTCCLKCmd();
如果使用LSE,要打开LSE:
RCC_LSEConfig(RCC_LSE_ON);
  • ④ 初始化RTC(同步/异步分频系数和时钟格式):
RTC_Init ();`
  • ⑤ 设置时间:
 RTC_SetTime ();
  • ⑥设置日期:
 RTC_SetDate();

五、RTC闹钟配置一般步骤:

  • RTC已经初始化好相关参数
  • 关闭闹钟:
RTC_AlarmCmd(RTC_Alarm_A,DISABLE);
  • 配置闹钟参数:
RTC_SetAlarm();
  • 开启闹钟:
RTC_AlarmCmd(RTC_Alarm_A,EABLE);
  • 开启配置闹钟中断:
 RTC_ITConfig();EXTI_Init();NVIC_Init();
  • 编写中断服务函数:
RTC_Alarm_IRQHandler();

六、RTC周期性自动唤醒配置一般步骤:

  • RTC已经初始化好相关参数
  • 关闭WakeUp:
RTC_WakeUpCmd(DISABLE);
  • 配置WakeUp时钟分频系数/来源:
 RTC_WakeUpClockConfig();
  • 设置WakeUp自动装载寄存器:
 RTC_SetWakeUpCounter();
  • 使能WakeUp :
 RTC_WakeUpCmd( ENABLE);
  • 开启配置闹钟中断:
 RTC_ITConfig();EXTI_Init();NVIC_Init();
  • 编写中断服务函数:
 RTC_WKUP_IRQHandler();

RTC 相关详解就说明到这里!!!

STM32F4 RTC详解相关推荐

  1. STM32开发 -- RTC详解

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

  2. STM32开发 -- 低功耗模式详解(2)

    如需转载请注明出处:https://juyou.blog.csdn.net/article/details/98631012 上一篇文章 STM32开发 – 低功耗模式详解(1) 简单的总结了一下低功 ...

  3. GD32F4—RTC闹钟及自动唤醒中断配置详解

    GD32F4-RTC闹钟及自动唤醒中断配置详解 一.简介 二.框图 三.RTC 初始化和配置 一.简介 GD32F4x的RTC例程网上资源较少,详细阅读用户手册后做出如下配置.RTC模块提供了一个包含 ...

  4. STM32开发 -- 低功耗模式详解

    很多单片机都有低功耗模式,STM32 也不例外.当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗. 这部分不是我负责,但是也是有必要看一下的. 参看: STM32F1开发指南-库函数版本_ ...

  5. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  6. linux /proc目录文件详解

    Linux中/proc目录下文件详解(一) /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用.可以使用的文件随系统配置的变化而变化.命令proc ...

  7. stm32 IOT_基于STM32平台的cubeMX和HAL库详解

    课程简介: <朱有鹏老师单片机完全学习系列课程>总共5季,其中第1.2季是51单片机学习,第3.4.5季是STM32单片机与RTOS学习.整个课程时长约250小时,是一套零基础.全面系统. ...

  8. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  9. STM32—— AHB、APB详解

     STM32-- AHB.APB详解 2016-07-14 20:35 590人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.概括 首先 ...

最新文章

  1. 一个基于组件的动态对象系统
  2. html基础:定义 图片 表格
  3. JavaScript原型学习
  4. 《剑指offer》字符串的排列
  5. 在计算机网络系统的远程通信中,在计算机网络系统的远程通信中,通常采用的传输技术是...
  6. java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件
  7. php 无法创建com组件,关于IIS php调用com组件的权限问题
  8. 时间序列模型matlab_平稳时间序列分析01---AR模型
  9. 利用对象思想来绘制canvas帧动画
  10. java改变人物动作_Java创建对象的动作分析
  11. 实时高清渲染:全局光照(Global Illumination)[2]---漫反射/高光全局光照
  12. 大型网站技术架构思维导图
  13. Python 随机生成 范围内(周围) 经纬度 坐标信息
  14. Exploring Complementary Strengths of Invariant and Equivariant Representations for Few-Shot Learning
  15. 17 款程序员神级 Chrome 插件,爱了爱了!
  16. java netbeans_Java和Netbeans字体美化
  17. pta--输入一个正整数n,再输入n个整数,输出其中的偶数。要求相邻数字中间用一个空格分开,行末不得有多余空格
  18. 分别统计其中数字、英文字母和其它字符的个数
  19. 通过Unity的铰链(HingeJoint)来制作弹簧门
  20. flutter实现一个下拉菜单【基于PopupMenuButton】

热门文章

  1. android关于IC卡读写及加密解密
  2. oracle 11g 服务启动后 监听程序当前无法识别SID的问题解决
  3. 【JTS】JTS的几何图形的基本关系方法
  4. 利用原生写js满天星星
  5. Android攻城狮四大组件之Service
  6. PS如何精确设置参考线,标尺,辅助线
  7. window10系统安装梅雁EDMS(MAYAN EDMS)
  8. HTML网页字体动态显示
  9. 【RW007系列综合实战3】柿饼派上怎样更新RW007固件和驱动?
  10. BZOJ3168: [Heoi2013]钙铁锌硒维生素