STM32F4 RTC详解
一、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详解相关推荐
- STM32开发 -- RTC详解
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/81409693 RTC实时时钟部分,之前也是有讲到过的. Hi3516A开发– ...
- STM32开发 -- 低功耗模式详解(2)
如需转载请注明出处:https://juyou.blog.csdn.net/article/details/98631012 上一篇文章 STM32开发 – 低功耗模式详解(1) 简单的总结了一下低功 ...
- GD32F4—RTC闹钟及自动唤醒中断配置详解
GD32F4-RTC闹钟及自动唤醒中断配置详解 一.简介 二.框图 三.RTC 初始化和配置 一.简介 GD32F4x的RTC例程网上资源较少,详细阅读用户手册后做出如下配置.RTC模块提供了一个包含 ...
- STM32开发 -- 低功耗模式详解
很多单片机都有低功耗模式,STM32 也不例外.当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗. 这部分不是我负责,但是也是有必要看一下的. 参看: STM32F1开发指南-库函数版本_ ...
- Linux中/proc目录下文件详解
Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...
- linux /proc目录文件详解
Linux中/proc目录下文件详解(一) /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用.可以使用的文件随系统配置的变化而变化.命令proc ...
- stm32 IOT_基于STM32平台的cubeMX和HAL库详解
课程简介: <朱有鹏老师单片机完全学习系列课程>总共5季,其中第1.2季是51单片机学习,第3.4.5季是STM32单片机与RTOS学习.整个课程时长约250小时,是一套零基础.全面系统. ...
- Linux中/proc目录下文件详解(二)
Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...
- STM32—— AHB、APB详解
STM32-- AHB.APB详解 2016-07-14 20:35 590人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.概括 首先 ...
最新文章
- 一个基于组件的动态对象系统
- html基础:定义 图片 表格
- JavaScript原型学习
- 《剑指offer》字符串的排列
- 在计算机网络系统的远程通信中,在计算机网络系统的远程通信中,通常采用的传输技术是...
- java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件
- php 无法创建com组件,关于IIS php调用com组件的权限问题
- 时间序列模型matlab_平稳时间序列分析01---AR模型
- 利用对象思想来绘制canvas帧动画
- java改变人物动作_Java创建对象的动作分析
- 实时高清渲染:全局光照(Global Illumination)[2]---漫反射/高光全局光照
- 大型网站技术架构思维导图
- Python 随机生成 范围内(周围) 经纬度 坐标信息
- Exploring Complementary Strengths of Invariant and Equivariant Representations for Few-Shot Learning
- 17 款程序员神级 Chrome 插件,爱了爱了!
- java netbeans_Java和Netbeans字体美化
- pta--输入一个正整数n,再输入n个整数,输出其中的偶数。要求相邻数字中间用一个空格分开,行末不得有多余空格
- 分别统计其中数字、英文字母和其它字符的个数
- 通过Unity的铰链(HingeJoint)来制作弹簧门
- flutter实现一个下拉菜单【基于PopupMenuButton】