【STM32+CUBEMX+HAL库】RTC设备学习小结

本文介绍了RTC设备的基本概念,详细讲述了如何使用CUBEMX配置STM32的RTC,重点在于HAL库中的RTC API应用,包括初始化、中断设置、时间显示和RTC掉电后重置问题的解决方案。
摘要由CSDN通过智能技术生成

为了巩固一下自己最近所学的知识,特此写一篇博客来记录一下。

什么是RTC设备?

RTC设备即real time clock的缩写,是一种掉电也能继续计时的计时器。虽然它只有简单的计时和触发中断的功能,但它掉电也能继续运行则让它的价值瞬间上升了无数倍。

CUBEmx配置

图一
RTC设备因为其独特的运行方式(即掉电依旧运行)导致它不能使用HSE或者HSI进行分频,否则资源消耗太大,小小的纽扣电池根本吃不消。所以我们可以选择单片机内部的LSI或者使用外部晶振LSE,推荐使用外部晶振LSE,因为单片机内部的LSI容易受到电压以及温度的影响导致精度不足。
在这里插入图片描述
在这里插入图片描述
以上为基本的一些设置。
在这里插入图片描述
在这里插入图片描述
以上分别是设置中断和设置系统日期。
在这里插入图片描述
在这里插入图片描述
因为接下来的例程会使用的串口和led灯所以要在cube中配置一下。

HAL库中有关RTC设备的API讲解

在编程之前我们需要先了解一下我们一会用到的api:

/*设置系统时间*/
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format) 
/*读取系统时间*/
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
/*设置系统日期*/
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
/*读取系统日期*/
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
/*启动报警功能*/
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
/*设置报警中断*/
HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
/*报警时间回调函数*/
__weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
/*写入后备储存器*/
void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data)
/*读取后备储存器*/
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister	

代码实战

接下来的代码会演示如何实时显示时间,设置rtc报警中断并启用中断,以及解决rtc掉电重启时间会重置的问题。
cubemx会自动帮我们生成初始化代码:

#include "rtc.h"
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */
RTC_HandleTypeDef hrtc;
/* RTC 初始化函数 */
void MX_RTC_Init(void)
{
   
  RTC_TimeTypeDef sTime = {
   0};
  RTC_DateTypeDef DateToUpdate = {
   0};
  /** 初始化RTC */
  hrtc.Instance = RTC;
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
   
    Error_Handler();
  }
  /* USER CODE BEGIN Check_RTC_BKUP */
 
  /* USER CODE END Check_RTC_BKUP */

  /** 设置RTC系统时间以及日期  */
  sTime.Hours = 19;
  sTime.Minutes = 29;
  sTime.Seconds = 0;

  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
  {
   
    Error_Handler();
  }
  DateToUpdate.WeekDay = RTC_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值