STM32进阶-RTC时钟应用的详细步骤

RTC时钟详细步骤RTC概述RTC相关库函数RTC日历配置步骤RTC闹钟配置步骤RTC周期性自动唤醒配置一般步骤RTC概述简介RTC (Real Time Clock):实时时钟STM32 的 RTC 外设,实质是一个掉电后还继续运行的定时器。RTC是个独立的BCD定时器/计数器。提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC还包含用于管理低功耗模式的自动唤醒单元。两个32位寄存器包含二进码十进制格式(BCD)的秒,分钟,小时(12或24小时制),星期几
摘要由CSDN通过智能技术生成

RTC概述

简介
RTC (Real Time Clock):实时时钟

  • STM32 的 RTC 外设,实质是一个掉电后还继续运行的定时器。RTC是个独立的BCD定时器/计数器。提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC还包含用于管理低功耗模式的自动唤醒单元。
  • 两个32位寄存器包含二进码十进制格式(BCD)的秒,分钟,小时(12或24小时制),星期几,日期,月份和年份。此外,还可以提供二进制的亚秒值。系统可以自动将月份的天数补偿为28,29(闰年),30,31天。并且还可以进行夏令时补偿。

主要特性

  • 包含亚秒、秒、分钟、小时(12/24 小时制)、星期几、日期、月份和年份的日历。
  • 软件可编程的夏令时补偿。
  • 两个具有中断功能的可编程闹钟。可通过任意日历字段的组合驱动闹钟。
  • 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断。
  • 参考时钟检测:可使用更加精确的第二时钟源(50 Hz 或 60 Hz)来提高日历的精确度。
  • 利用亚秒级移位特性与外部时钟实现精确同步。
  • 可屏蔽中断/事件:
    — 闹钟 A
    — 闹钟 B
    — 唤醒中断
    — 时间戳
    — 入侵检测
  • 数字校准电路(周期性计数器调整)
    — 精度为 5 ppm
    — 精度为 0.95 ppm,在数秒钟的校准窗口中获得
  • 用于事件保存的时间戳功能(1 个事件)
  • 入侵检测:
    — 2 个带可配置过滤器和内部上拉的入侵事件
  • 20 个备份寄存器(80 字节)。发生入侵检测事件时,将复位备份寄存器。
     
  • 复用功能输出 (RTC_OUT),可选择以下两个输出之一:
    RTC_CALIB:512 Hz 或 1 Hz 时钟输出(LSE 频率为 32.768 kHz)。
    可通过将 RTC_CR 寄存器中的 COE[23] 位置 1 来使能此输出。该输出可连接到器件 RTC_AF1 功能。
    RTC_ALARM(闹钟 A、闹钟 B 或唤醒)。
    可通过配置 RTC_CR 寄存器的 OSEL[1:0] 位选择此输出。该输出可连接到器件
    RTC_AF1 功能。
  • RTC 复用功能输入:
    RTC_TS:时间戳事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2 功能。
    RTC_TAMP1:TAMPER1 事件检测。该输入可连接到器件 RTC_AF1 和RTC_AF2功能。
    RTC_TAMP2:TAMPER2 事件检测。
    RTC_REFIN:参考时钟输入(通常为市电,50 Hz 或 60 Hz)。

在这里插入图片描述

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/12
 		uint32_t RTC_AsynchPrediv;  //异步分频 系数
	    uint32_t RTC_SynchPrediv;   //同步分频系数
}RTC_InitTypeDef

 

  • 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闹钟相关函数
//禁止或使能RTC闹钟。
ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState);

//RTC闹钟时间配置。
void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct);
 
//获取RTC闹钟的时间配置
void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct);
 
//功能配置RTC AlarmA/B的亚秒
void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue,  uint32_t RTC_AlarmSubSecondMask);

//得到RTC的亚秒时间。
uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm);
  • RTC周期唤醒相关函数
//配置RTC唤醒时钟源
void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock);

//配置RTC唤醒计数
void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter);

//得到唤醒定时器的计数值
uint32_t RTC_GetWakeUpCounter(void
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值