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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/227862.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PostGIS学习教程十一:投影数据

PostGIS学习教程十一&#xff1a;投影数据 地球不是平的&#xff0c;也没有简单的方法把它放在一张平面纸地图上&#xff08;或电脑屏幕上&#xff09;&#xff0c;所以人们想出了各种巧妙的解决方案&#xff08;投影&#xff09;。 每种投影方案都有优点和缺点&#xff0c;一…

干货!MES系统选型必须要考虑的9点要素!

你所在的企业是否为这些问题困扰&#xff1f; 纸质化管理混乱物料供应不及时设备数据难采集生产进度难透明 如果是的话&#xff0c;你的企业需要MES系统的帮助&#xff01; MES是制造执行系统&#xff08;Manufacturing Execution System&#xff09;的缩写。它是一种信息系…

Redis 环境搭建

文章目录 第1关&#xff1a;Redis 环境搭建 第1关&#xff1a;Redis 环境搭建 编程要求 根据上述相关知识&#xff0c;在右侧命令行中完成 Redis 集群的部署与安装。 安装完成后&#xff0c;使用 echo “cluster nodes”|redis-cli -p 7001 -c >/root/test.txt 将结果保存。…

外贸网站建站的注意事项?海洋建站的流程?

外贸网站建站需要注意什么&#xff1f;网站建设要注意哪些问题&#xff1f; 在建设外贸网站时&#xff0c;有一些关键的注意事项需要牢记&#xff0c;以确保网站的成功运营。海洋建站将介绍一些重要的外贸网站建站注意事项&#xff0c;帮助企业避免一些常见的陷阱和错误。 外…

架构师进阶,微服务设计与治理的 16 条常用原则

今天将从存储的上一层「服务维度」学习架构师的第二项常用能力 —— 微服务设计与治理。 如何设计合理的微服务架构&#xff1f; 如何保持微服务健康运行&#xff1f; 这是我们对微服务进行架构设计过程中非常关注的两个问题。 本文对微服务的生命周期定义了七个阶段&#x…

C //习题10.3 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test“中保存,输入的字符串以“!“结束。

C程序设计 &#xff08;第四版&#xff09; 谭浩强 习题10.3 习题10.3 从键盘输入一个字符串&#xff0c;将其中的小写字母全部转换成大写字母&#xff0c;然后输出到一个磁盘文件"test"中保存&#xff0c;输入的字符串以"!"结束。 IDE工具&#xff1a;V…

MongoDB数据库时区问题

1.问题描述&#xff1a; 利用MongoTemplate类更新mongodb集合中的指定日期字段时&#xff0c;用mongodb可视化工具Robo3t查看所更新的字段&#xff0c;发现数据库中显示时间当前时间&#xff08;东8区区时&#xff09;早了8个小时。 2.产生原因&#xff1a; MongoDB默认的是…

骨传导原理是什么?使用骨传导耳机的危害有哪些?

骨传导耳机顾名思义&#xff1a;就是利用骨传导技术传递声音的耳机&#xff0c;骨传导的传声方式是通过颅骨震动来进行传导&#xff0c;将声音传到颅骨&#xff0c;在通过颅骨直接传导到内耳&#xff0c;因此不需要将声音通过耳膜来进行传递&#xff0c;即使用双手捂住耳朵也可…

【Java基础篇 | 面向对象】—— 聊聊什么是接口(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 关于接口的简单的介绍…

干爆ChatGPT,谷歌发布新大模型:Gemini

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 谷歌昨天又发布了一个新的大模型&#xff0c;叫Gemini(双子座时代)。打开Google AI 就能看到。 据说非常强&#xff0c;然后是一大堆夸奖&#xff0c;大概是本月中旬的时候正式推出。标题明晃晃写…

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架

1.安装ThinkPHP6框架 这里我们使用的是composer安装的安装方式&#xff0c;请确保电脑已经安装了composer&#xff0c;如未安装可查看Composer 安装与使用 | 菜鸟教程 composer create-project topthink/think tp 上面命令安装的是稳定版的&#xff0c;也是最新的稳定版&…

【Java 基础】23 国际化

文章目录 1.概念2.原理1&#xff09;Locale2&#xff09;ResourceBundle3&#xff09;MessageFormat 3.例子1&#xff09;准备资源文件2&#xff09;加载资源文件3&#xff09;格式化消息&#xff08;非必须&#xff09; 总结 在全球化的今天&#xff0c;开发支持多语言的应用变…

LinuxBasicsForHackers笔记 -- BASH 脚本

你的第一个脚本&#xff1a;“你好&#xff0c;黑客崛起&#xff01;” 首先&#xff0c;您需要告诉操作系统您要为脚本使用哪个解释器。 为此&#xff0c;请输入 shebang&#xff0c;它是井号和感叹号的组合&#xff0c;如下所示&#xff1a;#! 然后&#xff0c;在 shebang …

为什么越来越多的网站使用https,有什么好处?什么是https加密协议?

首先回答“什么是https加密协议&#xff1f;” HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种通过加密传输数据的安全版本的HTTP协议。它使用了SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&#xf…

IntelliJ IDEA 2023.3 最新变化

关键亮点 AI Assistant 预览阶段结束 全面推出 Ultimate JetBrains AI Assistant 现已全面推出&#xff0c;搭载大量新功能和改进&#xff0c;助力提高您在 JetBrains IDE 中的工作效率。 最新更新包括编辑器中增强的直接代码生成、无需复制代码即可回答项目相关查询的上下文…

网络监控:网络故障告警通知

网络警报是向网络管理员发出的指示&#xff0c;表明设备已达到其设置的阈值或面临任何性能异常&#xff0c;网络警报可以通过不同的渠道通知网络管理员&#xff0c;例如电子邮件、短信、松弛、网络警报等。 通过网络监控警报&#xff0c;可以快速了解网络问题&#xff0c;通过…

低代码与MES:智能制造的新篇章

一、引言 随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接计划层与控制层的关键信息系统&#xff0c;在提升生产效率、优化资源配置、保障产品质量等方面发挥着重要作用。然而&#…

前端开发常用的Vscode插件整理(持续更新)

本文记录用vscode进行前端开发时&#xff0c;常用到的有用的vscode插件&#xff0c;将不定时更新&#xff5e; 1、Chinese (Simplified) 将编辑器变成简体中文 2、vscode-icon 让 vscode 资源树目录加上图标&#xff0c;官方出品的图标库 3、Import Cost 引入包大小计算,对于…

hadoop安装与配置-shell脚本一键安装配置(集群版)

文章目录 前言一、安装准备1. 搭建集群 二、使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 加载用户环境变量 三、启动与停止1. 启动/停止hadoop集群(1) 复制hadoop集群启动脚本(2) 增加执行权限(3) 启动hadoop集群(4) 停止hadoop集群(5) 重启hado…

直播预告|StarRocks 3.2 全面解读:易用性和性能的双重提升

StarRocks 3.2 版本即将发布&#xff0c;这是 StarRocks 的又一次重大升级&#xff0c;除了进一步完善存算分离架构、数据湖分析和物化视图等重要特性&#xff0c;我们还聚焦于运维操作细节&#xff0c;大大提升了 StarRocks 的易用性&#xff0c;从建表、表变更、数据导入、查…