STM32CubeIDE(CUBE-MX hal库)----RTC时钟,时钟实时显示

系列文章目录

STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯
STM32CubeIDE(CUBE-MX hal库)----按键控制
STM32CubeIDE(CUBE-MX hal库)----串口通信
STM32CubeIDE(CUBE-MX hal库)----定时器
STM32CubeIDE(CUBE-MX hal库)----蓝牙模块HC-05(详细配置)


前言

RTC是一个独立的定时器,可为系统提供时钟和日历的功能

在这里插入图片描述
在这里插入图片描述

一、可视化配置

1.配置RCC时钟源,LSE外部低速时钟,HSE外部高速时钟
在这里插入图片描述

2.配置RTC,Activate Clock Source 激活时钟源,Activate calendar激活日历,RTC全局中断在这里插入图片描述
3.设置参数,设置当前的时间。BCD data format BCD码进制,23为2023年的后两位
在这里插入图片描述

4.使能串口,将日期发送到上位机在这里插入图片描述
5.时钟源设置, 设置RTC时钟为LSE
在这里插入图片描述

二、修改代码

1.头文件加入<stdio.h>因为加入了printf

/* USER CODE BEGIN Includes */
#include <stdio.h>

/* USER CODE END Includes */

2.在USER CODE BEGIN 0中加入重定向代码

/* USER CODE BEGIN 0 */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
   
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1,0xFFFF);
    return ch;
}


int fputc(int ch,FILE *f)
{
   
	HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xffff);
	return ch;
}

/* USER CODE END 0 */

3.在while (1)中加入获取时间和日期代码

  while (1)
  {
   
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  /* Get the RTC current Time */
	  HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
      /* Get the RTC current Date */
      HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

      /* Display date Format : yy/mm/dd */
      printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
      /* Display time Format : hh:mm:ss */
      printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);

      printf("\r\n");

      HAL_Delay(1000);

  }

三、实验现象

实现时钟的
在这里插入图片描述

四、扩展

RTC掉电或者复位时时间会进行重置,如果不进行重置则加上改动下面代码

 void MX_RTC_Init(void)
{
   

  /* USER CODE BEGIN RTC_Init 0 */
		RTC_TimeTypeDef time;   //时间结构体参数
		RTC_DateTypeDef datebuff;   //日期结构体参数
  /* USER CODE END RTC_Init 0 */

  RTC_TimeTypeDef sTime = {
   0};
  RTC_DateTypeDef DateToUpdate = {
   0};

  /* USER CODE BEGIN RTC_Init 1 */
	__HAL_RCC_BKP_CLK_ENABLE();       //开启后备区域时钟
	__HAL_RCC_PWR_CLK_ENABLE();		  //开启电源时钟
  /* USER CODE END RTC_Init 1 */
  /**Initialize RTC Only 
  */
  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 */
	if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!= 0x5051)
	{
   
		
  /* USER CODE END Check_RTC_BKUP */

  /**Initialize RTC and set the Time and Date 
  */
  sTime.Hours = 0x23;
  sTime.Minutes = 0x28;
  sTime.Seconds = 0x20;

  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  {
   
    Error_Handler();
  }
  DateToUpdate.WeekDay = RTC_WEEKDAY_THURSDAY;
  DateToUpdate.Month = RTC_MONTH_DECEMBER;
  DateToUpdate.Date = 0x7;
  DateToUpdate.Year = 0x23;

  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
  {
   
    Error_Handler();
  }
  /* USER CODE BEGIN RTC_Init 2 */

	__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC);	 //开启RTC时钟秒中断
	datebuff = DateToUpdate;  //把日期数据拷贝到自己定义的data中
	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0x5051);//向指定的后备区域寄存器写入数据
	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR2, (uint16_t)datebuff.Year);
	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR3, (uint16_t)datebuff.Month);
	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR4, (uint16_t)datebuff.Date);
	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR5, (uint16_t)datebuff.WeekDay);
	
  }
	else
	{
   
		datebuff.Year    = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR2);
		datebuff.Month   = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR3);
		datebuff.Date    = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR4);
		datebuff.WeekDay = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR5);
		DateToUpdate = datebuff;
		if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN) != HAL_OK)
		{
   
			Error_Handler();
		}
		__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC);	 //开启RTC时钟秒中断		
	}
	


}

参考文章:https://blog.csdn.net/as480133937/article/details/105741893

相关推荐

  1. 时光流转:探秘STM32实时时钟RTC

    2023-12-08 15:16:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 15:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 15:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 15:16:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 15:16:01       20 阅读

热门阅读

  1. LeeCode每日刷题12.8

    2023-12-08 15:16:01       36 阅读
  2. 附录1、vuepress中的Markdown语法

    2023-12-08 15:16:01       41 阅读
  3. 利用 Python 进行数据分析实验(三)

    2023-12-08 15:16:01       29 阅读
  4. 利用 Python 进行数据分析实验(五)

    2023-12-08 15:16:01       34 阅读
  5. docker网络

    2023-12-08 15:16:01       28 阅读
  6. VBA 数组写入ACCESS

    2023-12-08 15:16:01       39 阅读
  7. 数据结构的存储方式

    2023-12-08 15:16:01       35 阅读
  8. Kotlin(十三) 延迟初始化和密封类

    2023-12-08 15:16:01       36 阅读