RTC基本定义

STM32的实时时钟(RTC)是一个独立的定时器。STM32的RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。

RTC时钟框图


RTC配置一般步骤

1、使能PWR和BKP时钟
2、使能后备寄存器访问
3、配置RTC时钟源,使能RTC时钟:如果使用LSE,要打开LSE: RCC_LSEConfig(RCC_LSE_ON);
4、设置RTC预分频系数
5、设置时间
6、开启相关中断(如果需要)
7、编写中断服务函数
8、部分操作要等待写操作完成和同步。

RTC的初始化CubeMX基本配置

1、选择时钟源有效,日历有效

2、对时钟进行初始化配置

3、配置时钟树

RTC代码编写

rtc.c文件

#include "rtc.h"RTC_HandleTypeDef hrtc;    //句柄结构体void RTC_Init(void)  //RTC初始化函数
{/* USER CODE BEGIN RTC_Init 0 *//* USER CODE END RTC_Init 0 */RTC_TimeTypeDef sTime = {0};RTC_DateTypeDef sDate = {0};/* USER CODE BEGIN RTC_Init 1 *//* USER CODE END RTC_Init 1 *//** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24; //24小时计时方式hrtc.Init.AsynchPrediv = 125;hrtc.Init.SynchPrediv = 6000;  //完成分频最后输出1Hzhrtc.Init.OutPut = RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}/* USER CODE BEGIN Check_RTC_BKUP *//* USER CODE END Check_RTC_BKUP *//** Initialize RTC and set the Time and Date*/sTime.Hours = 0x12;    //时间初始值设置sTime.Minutes = 0x0;sTime.Seconds = 0x0;sTime.SubSeconds = 0x0;sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;sTime.StoreOperation = RTC_STOREOPERATION_RESET;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}sDate.WeekDay = RTC_WEEKDAY_THURSDAY;  //日期设置sDate.Month = RTC_MONTH_FEBRUARY;sDate.Date = 0x3;  sDate.Year = 0x22;if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}/* USER CODE BEGIN RTC_Init 2 *//* USER CODE END RTC_Init 2 */}void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
{if(rtcHandle->Instance==RTC){/* USER CODE BEGIN RTC_MspInit 0 *//* USER CODE END RTC_MspInit 0 *//* RTC clock enable */__HAL_RCC_RTC_ENABLE();    //使能RTC时钟/* USER CODE BEGIN RTC_MspInit 1 *//* USER CODE END RTC_MspInit 1 */}
}

rtc.h文件

#ifndef __RTC_H
#define __RTC_H
#include "main.h"extern RTC_HandleTypeDef hrtc;
void RTC_Init(void);
#endif

main.c文件

#include "main.h"
#include "stdio.h"
#include "string.h"
#include "lcd.h"
#include "rtc.h"__IO uint32_t uwTick_LCD_State_Pointer;
unsigned char Lcd_Disp_String[21];//RTC结构体变量
RTC_TimeTypeDef T; //时间结构体
RTC_DateTypeDef D; //日期结构体int main(void)
{//RTC初始化RTC_Init();while (1){LCD_Proc();}
}void LCD_Proc(void)
{if(uwTick-uwTick_LCD_State_Pointer<100) return;uwTick_LCD_State_Pointer=uwTick;    //RTC时间和日期读取函数HAL_RTC_GetTime(&hrtc , &T , RTC_FORMAT_BIN); HAL_RTC_GetDate(&hrtc , &D , RTC_FORMAT_BIN);   //时间和日期必须同时Get,否则时间无法正常计数memset(Lcd_Disp_String,0,sizeof(Lcd_Disp_String));sprintf((char*)Lcd_Disp_String, "Date: %02d-%02d-%02d " ,D.Year,D.Month,D.Date);    //显示日期22-02-03LCD_DisplayStringLine(Line0, Lcd_Disp_String);memset(Lcd_Disp_String,0,sizeof(Lcd_Disp_String));sprintf((char*)Lcd_Disp_String, "Time: %02d-%02d-%02d " ,T.Hours,T.Minutes,T.Seconds);  //显示时间从计数初值12-00-00开始计数LCD_DisplayStringLine(Line1, Lcd_Disp_String);
}/*** @brief System Clock Configuration
`  * @retval None*/
void SystemClock_Config(void)   //时钟初始化函数
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Configure the main internal regulator output voltage*/HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV3;RCC_OscInitStruct.PLL.PLLN = 20;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}/** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_ADC12;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_HSE_DIV32;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}

蓝桥杯STM32G431——RTC实时时钟相关推荐

  1. 蓝桥杯 stm32 RTC实时时钟

    文章代码使用 HAL 库. 文章目录 前言 一.RTC 重要特性: 二.CubeMX 创建工程. 三.读取系统日期 函数. 四.读取系统时间 函数. 四.在 LCD 上显示 时间. 总结 实验效果 前 ...

  2. 蓝桥杯单片机之DS1302时钟模块的使用

    蓝桥杯单片机之DS1302时钟模块的使用 DS1302简介 SPI串口简介 BCD码 阅读手册获取寄存器信息 日历时钟寄存器 控制字 将手册中的数据进行分析可得 完整代码示例: 总结 DS1302简介 ...

  3. 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...

  4. RTC实时时钟(学习笔记)

    RTC实时时钟特征与原理 RTC(Real Time Clock):实时时钟. RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可 ...

  5. 十九、RTC实时时钟

    一..RTC实时时钟工作框图 RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连.此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作.APB1 接口 ...

  6. stm32f4 RTC实时时钟解析

    RTC是什么–简介 RTC,英文全称:Real-time clock,中文名称:实时时钟,是指可以像时钟一様输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片.实时时钟芯片是日常生活中应用最 ...

  7. STM32——RTC实时时钟原理+BKP寄存器原理

    一.RTC实时时钟特征与原理 1.RTC(Real Time Clock):实时时钟 2.RTC是个独立的BCD定时器/计数器.RTC提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性 ...

  8. STM32之RTC实时时钟

    RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运 ...

  9. 嵌入式--RTC实时时钟原理及相关库函数功能

    一.RTC实时时钟原理 1.RTC实时时钟是一个独立的定时器,可以提供日期时间或者闹钟的功能.其核心是通过32位可编程计数器RTC_CNT计数来进行时间配置. 2.图1中RTCCLK为RTC时钟源,其 ...

最新文章

  1. 谷歌CEO皮猜致歉,被解雇的AI伦理研究员:根本没有认错
  2. 高通8x12平台开机画面制作工具
  3. 在Ubuntu中安装及配置java
  4. Mysql的分库分表(基于shardingsphere)
  5. 怎么使用config?
  6. 洲明科技与意法半导体合作开发新一代LED显示屏
  7. VSCode打开多个项目文件夹的解决方法
  8. 2017-2018-2 1723《程序设计与数据结构》第八周作业 实验二 第一周结对编程 总结...
  9. css伪元素选择器,first-letter、first-line
  10. hdu 4288 线段树 暴力 **
  11. Redis容量及使用规划(转)
  12. 教室录播系统方案_学校教室录播系统解决方案
  13. 全自动解密解码神器 — Ciphey
  14. 鼠标左右键的快捷键是什么?
  15. 零基础学习软件测试必看的python之基础语法
  16. 第39级台阶 蓝桥杯递归 java
  17. nmap下载和扫描教程
  18. 初学RabbitMQ(三),了解回调函数,并手动确认消息进行消费
  19. mysqli被遗弃了_在您的申请中被遗忘的权利
  20. 家用计算机硬盘一般价格,家用电脑使用企业级硬盘的效果会很好吗?

热门文章

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - 接入GitHub,用JWT保护你的API
  2. Skywalking+Nacos实现高可用集群和动态配置
  3. 监控系统相关的常见面试问题
  4. 归并排序(默认2路归并)
  5. Win10系统中如何使用安卓模拟器的方法
  6. tpx色卡电子版_潘通色卡电子版下载
  7. 云测试平台(testin)
  8. 乌镇互联网大会 阿里云飞天当选世界互联网代表性领先科技成果
  9. 计算机启动进入不了桌面图标,电脑开机后,进到桌面图标都没有开始也点不开 win10...
  10. Scratch课程设计(五)