当前位置: 首页 > news >正文

HAL+Cubemx+RTC实时时钟(掉电不丢失)

整体思路:

1.设置时钟时间

2.通过每次初始化后在BKP(备份寄存器)写入标志位,并且在初始化前先检查是否有标志位,实现掉电不丢失

备注:

1.BKP(备份寄存器)在使用RTC功能时,由cubemx自动开启

2.第一次初始化设定时间后,只要后备区域不断电,RTC就会一直走时

一:cubemx配置

二:程序编写

在int main前定义

RTC_TimeTypeDef RTC_Time ;//时分秒 RTC_DateTypeDef RTC_Date; //年月日
while (1) { HAL_RTC_GetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN); HAL_RTC_GetTime(&hrtc,&RTC_Time, RTC_FORMAT_BIN); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }

到此,使用实时监控变量,已经可以看见时钟在正常走时了,但是复位后时钟又会被初始化,相当于丢失了

二:实现掉电不丢失

下面这个是准备在BKP的这个地址上写入这个标志位

#define RTC_BKP_DRX RTC_BKP_DR1 #define RTC_MAGIC 0x32F2

2.需要在int mian()前重新定义一个函数void RTC_Init_Check(void),用于在每次初始化前检查是否有标志位,如果有标志位,说明时间已经设置过了,并且后备区域并未掉电,直接读取当前时间,即可

void RTC_Init_Check(void) { if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DRX) != RTC_MAGIC) { // ❌ 第一次上电(或者电池没电) RTC_TimeTypeDef sTime = {0}; RTC_DateTypeDef sDate = {0}; // 设置时间 sTime.Hours = 12; sTime.Minutes =22; sTime.Seconds = 0; HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); // 设置日期 sDate.Year = 26; sDate.Month = RTC_MONTH_MARCH; sDate.Date = 23; HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN); // 写标志 HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DRX, RTC_MAGIC); } else { // ✅ 已初始化 → 什么都不做(保持原时间) } }

3.修改 MX_RTC_Init();并且调用RTC_Init_Check();

static void MX_RTC_Init(void) { /* USER CODE BEGIN RTC_Init 0 */ /* USER CODE END RTC_Init 0 */ /* USER CODE BEGIN RTC_Init 1 */ /* USER CODE END RTC_Init 1 */ /** Initialize RTC Only */ hrtc.Instance = RTC; hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM; if (HAL_RTC_Init(&hrtc) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN Check_RTC_BKUP */ RTC_Init_Check(); /* USER CODE END Check_RTC_BKUP */ /** Initialize RTC and set the Time and Date */ /* USER CODE BEGIN RTC_Init 2 */ /* USER CODE END RTC_Init 2 */ }

到此,结束,已经实现了掉电数据不丢失

http://www.jsqmd.com/news/527788/

相关文章:

  • 谈谈定时任务实战问题及解决方案、实现原理
  • HoRain云--SVN生命周期全解析:从创建到消亡
  • 程序员内功心法:一篇讲透数据结构,从底层逻辑到高级应用
  • T5403气压传感器I²C驱动开发与嵌入式工程实践
  • Hunyuan-OCR-WEBUI案例展示:多语言混合文档的精准识别效果
  • IDEA 2022 Services窗口不显示端口?3种方法实测对比(附Spring Boot项目配置模板)
  • 照着用就行:毕业论文全流程神器——千笔·降AIGC助手
  • PatchTST:以“词”为基,Transformer如何重塑长时序预测新范式
  • 【MCP 2.0安全接入黄金法则】:20年协议安全专家亲授3步极速合规上线(含国密SM4/SM2实测基准)
  • 快速部署次元画室:基于Qwen3-32B的动漫角色设计终端,开箱即用
  • 如何安全解锁华为设备Bootloader:面向普通用户的完整指南
  • Realistic Vision V5.1 虚拟摄影棚:基于Skills智能体的自动化工作流构建
  • 终极游戏模组管理方案:XXMI启动器让你的游戏体验提升90%
  • C++的std--ranges开销路径
  • 魔兽争霸III现代系统适配与性能优化实战指南
  • 3大核心功能解析:从零开始掌握Ryujinx模拟器实战技巧
  • E2E自驾规控30讲:导论
  • 深度学习环境一键搞定:预装PyTorch1.13,支持模型训练验证
  • 别再只会用FFT了!用MATLAB玩转信号功率谱分析:从周期图到Welch法的保姆级实战
  • 大麦抢票自动化工具:高效抢票与配置指南
  • Qwen2.5-32B-Instruct保姆级教程:Ubuntu20.04环境部署
  • Sparse4D算法的tricks
  • 公开课 | Openclaw+SeeDance, 普通人也能用 AI 打造稳定收入
  • 【2024唯一权威实测报告】:Python 3.15异步HTTP客户端QPS突破142,000,但93%开发者尚未启用这3个关键配置!
  • 保姆级教程:手动导入Flannel镜像到K8s节点,彻底告别Docker拉取失败
  • 2026天津爱首推服务商评测:优质之选在此,头部爱首推品牌技术实力与市场典范解析 - 品牌推荐师
  • 5个关键问题:如何构建高可靠分布式智能体通信系统?
  • 2026年天津汽车贴膜怎么选,看看路安老李天津汽车贴膜咋样 - 工业品牌热点
  • OpenClaw到底是什么?一篇文章讲清楚AI智能体这个概念
  • 2026最新 Springboot+vue宠物领养救助平台的设计与实现