读写备份寄存器BKP与实时时钟RTC

文章目录

  • 读写备份寄存器
    • 接线图
    • 代码
  • RTC实时时钟
    • 接线图
    • 代码


读写备份寄存器

接线图

即接个3.3v的电源到VBT引脚
在这里插入图片描述

代码

代码效果:第一次写入备份寄存器,下载程序后再注释掉,再进行下载,之前写入的数据还会保存在备份寄存器中(还可以读到),并且复位键或拔掉主电源再插上数据也不会丢失,直到主电源备用电源同时不能供电数据才会消失

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"uint16_t Data;
int main(void)
{OLED_Init();OLED_ShowChar(1,1,'z');// 打开PWR,BKP时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);// 使能PWRPWR_BackupAccessCmd(ENABLE);// 写备份寄存器//BKP_WriteBackupRegister(BKP_DR1,0X1234);// 读取备份寄存器Data = BKP_ReadBackupRegister(BKP_DR1);OLED_ShowHexNum(2,1,Data,4);while (1){}
}

RTC实时时钟

接线图

在这里插入图片描述

代码

对RTC进行配置,保存于ThisRTC.c

#include "stm32f10x.h"                  // Device header
#include <time.h>
struct ThisRTC_Time{uint16_t year;		// 年uint8_t month;		// 月uint8_t day;		// 日uint8_t hour;		// 时uint8_t min;		// 分uint8_t sec;		// 秒	
};
extern struct ThisRTC_Time ThisRTC_Time1;void ThisRTC_Init(void){// 打开PWR,BKP时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);// 使能PWRPWR_BackupAccessCmd(ENABLE);// 如果备份寄存器数据丢失则重新初始化if(BKP_ReadBackupRegister(BKP_DR1) != 0X9999){// 启动LSE时钟源RCC_LSEConfig(RCC_LSE_ON);// 等待LSE启动完成while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)!=SET);// 选择RTC时钟源为LSERCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);// 使能RTC时钟RCC_RTCCLKCmd(ENABLE);// 等待同步RTC_WaitForSynchro();// 等待上一步写操作完成RTC_WaitForLastTask();// 配置分频系数,自动进入配置模式并退出RTC_SetPrescaler(32768-1);// 等待上一步写操作完成RTC_WaitForLastTask();void ThisRTC_SetTime(void);ThisRTC_SetTime();// 写入备份寄存器BKP_WriteBackupRegister(BKP_DR1,0X9999);}else{// 等待同步RTC_WaitForSynchro();// 等待上一步写操作完成RTC_WaitForLastTask();}}void ThisRTC_SetTime(void){time_t time_cnt;struct tm time_date;time_date.tm_year = ThisRTC_Time1.year - 1900;time_date.tm_mon = ThisRTC_Time1.month - 1;time_date.tm_mday = ThisRTC_Time1.day;time_date.tm_hour = ThisRTC_Time1.hour;time_date.tm_min = ThisRTC_Time1.min;time_date.tm_sec = ThisRTC_Time1.sec;// 将日期类型转换为秒计数器类型,并设置为RTC时间time_cnt = mktime(&time_date) - 8 * 60 * 60;RTC_SetCounter(time_cnt);// 等待上一步写操作完成RTC_WaitForLastTask();
}void ThisRTC_ReadTime(void){time_t time_cnt;struct tm time_date;time_cnt = RTC_GetCounter() + 8 * 60 * 60;	// 加时区偏移变为北京时间time_date = *localtime(&time_cnt);ThisRTC_Time1.year = time_date.tm_year + 1900;ThisRTC_Time1.month = time_date.tm_mon + 1;ThisRTC_Time1.day = time_date.tm_mday;ThisRTC_Time1.hour = time_date.tm_hour;ThisRTC_Time1.min = time_date.tm_min;ThisRTC_Time1.sec = time_date.tm_sec;
}

头文件ThisRTC.h声明

#ifndef __THISRTC_H
#define __THISRTC_H
// 存放时间结构体
struct ThisRTC_Time{uint16_t year;	// 年uint8_t month;	// 月uint8_t day;		// 日uint8_t hour;		// 时uint8_t min;		// 分uint8_t sec;		// 秒	
};
struct ThisRTC_Time ThisRTC_Time1 = {2024,10,27,5,2,0};void ThisRTC_Init(void);
void ThisRTC_SetTime(void);
void ThisRTC_ReadTime(void);#endif

主函数内容

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "ThisRTC.h"int main(void)
{OLED_Init();ThisRTC_Init();OLED_ShowString(1,1,"Date:XXXX-XX-XX");OLED_ShowString(2,1,"Time:XX:XX:XX");OLED_ShowString(3,1,"CNT :");OLED_ShowString(4,1,"DIV :");while (1){ThisRTC_ReadTime();OLED_ShowNum(1,6,ThisRTC_Time1.year,4);OLED_ShowNum(1,11,ThisRTC_Time1.month,2);OLED_ShowNum(1,14,ThisRTC_Time1.day,2);OLED_ShowNum(2,6,ThisRTC_Time1.hour,2);OLED_ShowNum(2,9,ThisRTC_Time1.min,2);OLED_ShowNum(2,12,ThisRTC_Time1.sec,2);OLED_ShowNum(3,6,RTC_GetCounter(),10);OLED_ShowNum(4,6,RTC_GetDivider(),6);		// 余数寄存器}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 sudo apt upgrade 出现的提示

┌────────────────────────────────────────────────┤ Pending kernel upgrade ├────────────────────────────────────────────────┐ │ …

搭建一个vue3+vant4+vite4+pinia 的移动端h5模板

效果图 项目的创建和组件库的安装 项目创建 pnpm create vite vue3-vant4-vite-pinia-pro-h5注意&#xff1a; node版本控制在 18&#xff0c; 可以通过nvm来管理本地的node版本&#xff0c;具体可以看这篇文章 nvm的简单使用 vant-ui库的安装【这里安装的是 ^4.6.0 版本的】…

Maven- Profile详解

前言 Profile能让你为一个特殊的环境自定义一个特殊的构建&#xff1b;profile使得不同环境间构建的可移植性成为可能。 <project><profiles><profile><build><defaultGoal>...</defaultGoal><finalName>...</finalName><…

HTML控件和Web控件之间的区别是什么

HTML控件和Web控件在ASP.NET中有着不同的定义和用途&#xff0c;它们之间的主要区别体现在以下几个方面&#xff1a; 概念&#xff1a; HTML控件&#xff1a;就是我们通常所说的HTML语言标记&#xff0c;这些标记在静态页面和其他网页中存在。它们不能在服务器端直接控制&#…

linux系统服务器中常见故障及排查方法

目录 故障1&#xff1a;系统无响应 故障2&#xff1a;网络连接问题 故障3&#xff1a;文件系统错误 故障4&#xff1a;软件包依赖问题 故障5&#xff1a;用户权限问题 故障6&#xff1a;服务无法正常工作 故障7&#xff1a;磁盘空间不足 故障8&#xff1a;内存不足 故障…

2024年华为OD机试真题- 手机App防沉迷系统-(C++)-OD统一考试(C卷D卷)

题目描述: 智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。 它的大概原理是这样的: 1、在一天24小时内,可注册每个App的允许使用时段; 2、一个时段只能使用一个App,举例…

掼蛋—开牌三步走

掼蛋是消遣也是一项脑力活动&#xff0c;除了牌运&#xff0c;还要掌握技巧。和大家一起分享一下掼蛋游戏中的“开牌三步走”技巧。 1、快速理牌 目的&#xff1a;潜力最大化 开局时可以快速查看一下自己的同花顺&#xff0c;优先保留不损害其他炸弹的同花顺&#xff0c;并及时…

精益生产咨询公司:深入探讨其独特魅力与核心竞争力

精益生产咨询公司&#xff0c;作为专注于帮助企业实现精益转型和效率提升的专业机构&#xff0c;在现代工业生产中扮演着不可或缺的角色。这些公司不仅具备深厚的行业经验和专业知识&#xff0c;还能够根据企业的实际情况和需求&#xff0c;提供个性化的解决方案和持续的支持服…

用户至上!探索7种常用的用户体验研究方法

用户体验研究是产品开放过程中的重要组成部分&#xff0c;优秀的产品设计与高质量的用户体验是不可分割的。对于产品开发&#xff0c;选择合适的用户体验研究方法在很大程度上决定了产品的使用效果。本文全面阐述了用户体验研究、用户体验研究的重要性和用户体验研究方法&#…

mamba复现—mamba+yolov8魔改(win)

Mamba复现出现的问题 安装下列步骤一步步走 一、 注&#xff1a;若是Windows环境下python一定是3.10版本的&#xff0c;要不然trition无法安装 conda create -n mamba python3.10 conda activate mamba conda install cudatoolkit11.8 -c nvidia pip install torch2.1.1 t…

探索国外静态住宅代理:保护网络安全与隐私的利器

随着互联网的日益发展&#xff0c;网络安全和隐私保护成为越来越多用户关注的焦点。在这个信息爆炸的时代&#xff0c;如何确保网络活动的匿名性和安全性成为了我们必须面对的问题。国外静态住宅代理作为一种新兴的网络技术&#xff0c;为我们提供了有效的解决方案。 &#xf…

OSTEP Projects:KV

本文将介绍操作系统导论&#xff08;Operating Systems: Three Easy Pieces&#xff09;作者所开源的操作系统相关课程项目 的 KV 部分&#xff0c;包含个人的代码实现和设计思路。 思路 题目要求实现一个最简单的数据库&#xff0c;以支持数据的持久化。 每个操作由格式为 o…

目标检测——道路检测数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

C#中的异步编程模型

在C#中&#xff0c;async和await关键字是用于异步编程的重要部分&#xff0c;它们允许你以同步代码的方式编写异步代码&#xff0c;从而提高应用程序的响应性和吞吐量。这种异步编程模型在I/O密集型操作&#xff08;如文件读写、网络请求等&#xff09;中特别有用&#xff0c;因…

在Ubuntu上安装Anaconda并配置远程访问Jupyter

安装 下载Anaconda的.sh文件后&#xff0c;上传到服务器&#xff0c;然后进行安装&#xff1a; chmod x anaconda.sh ./anaconda.sh创建虚拟环境 可以指定Python版本创建虚拟环境&#xff1a; conda create --name langchain python3.11.7 conda activate langchain conda …

如何在Springboot项目的Mapper中增加一个新的sql语句

在做项目的过程中&#xff0c;我发现有的时候需要用到一些不在springboot的Mapper中的Sql语句&#xff0c;那么应该如何进行操作呐&#xff1f;&#xff1f; 平常我们创建springbootmybatisPlus项目的时候是这样创建的&#xff1a;&#xff1a; 1、创建实体类 2、创建Mappe…

【Python】如何训练模型并保存本地和加载模型

这个年纪的我们 爱情跟不上分开的节奏 这个年纪的我们 更珍惜难得的自由 这个年纪的我们 比起从前更容易感动 这个年纪的我们 徘徊在理想与现实之中 &#x1f3b5; 齐一《这个年纪》 逻辑回归是一种常用的分类算法&#xff0c;能够根据输入特征预测目标变…

https://blog.csdn.net/gang542725/article/details/138621192

uboot Ethernet 数据收发流程【1】 总结了一部分uboot收发数据的流程 这里继续 ! static int eqos_start(struct udevice *dev) 1210{ 1211 struct eqos_priv *eqos = dev_get_priv(dev); 1212 int ret, i; 1213 ulong rate; 1214 u32 val, tx_fifo_sz, rx_fifo_sz, tqs, …

Vite:下一代前端构建工具的快速上手

Vite 是由 Vue.js 的作者尤雨溪开发的下一代前端构建工具&#xff0c;它以其快速的冷启动、按需编译和热更新能力而受到广泛关注。Vite 通过利用浏览器原生的 ES 模块导入功能&#xff0c;提供了几乎即时的开发环境启动速度和高度优化的开发体验。 安装 Vite 首先&#xff0c…

2024年最新方法下载钉钉群直播回放

链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好所有的压缩包&#xff0c;这个压缩包里面还套着一共逍遥一仙下载器压缩包&#xff0c;也解压 2.进入逍遥一仙下载器文件夹&#xff0c;打开M3U8 V1.4.8 0508.e…