国民技术RTC备份寄存器RTC_BKP

根据手册资料知道RTC_BKP的地址,代码如下
#include "main.h"
#include "usart.h"void USART2_Configuration(void)
{USART_InitType USART_InitStructure;GPIO_InitType GPIO_InitStructure;GPIO_InitStruct(&GPIO_InitStructure);RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_USART2, ENABLE);GPIO_InitStructure.Pin = GPIO_PIN_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART2;GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.Pin = GPIO_PIN_5;GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up;GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART2;GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);USART_StructInit(&USART_InitStructure);USART_InitStructure.BaudRate = 115200;USART_InitStructure.WordLength = USART_WL_8B;USART_InitStructure.StopBits = USART_STPB_1;USART_InitStructure.Parity = USART_PE_NO;USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;USART_Init(USART2, &USART_InitStructure);USART_Enable(USART2, ENABLE);
}int fputc(int ch, FILE* f)
{USART_SendData(USART2, (uint8_t)ch);while (USART_GetFlagStatus(USART2, USART_FLAG_TXDE) == RESET);return (ch);
}
#include "n32l40x.h"
#include "n32l40x_rtc.h"
#include "User_RTCBKP_Config.h"uint16_t BKP_Datas[BACKUP_REGISTER_SIZE]={BKP_DAT1, BKP_DAT2, BKP_DAT3, BKP_DAT4, BKP_DAT5, \BKP_DAT6, BKP_DAT7, BKP_DAT8, BKP_DAT9, BKP_DAT10,\BKP_DAT11,BKP_DAT12,BKP_DAT13,BKP_DAT14,BKP_DAT15,\BKP_DAT16,BKP_DAT17,BKP_DAT18,BKP_DAT19,BKP_DAT20};uint32_t Read_Backup_Datas[BACKUP_REGISTER_SIZE]={0x00};void User_RTCBKP_Init(void)
{RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);/* Allow access to RTC */PWR_BackupAccessEnable(ENABLE);RCC_EnableRtcClk(DISABLE);/* Enable the LSE OSC32_IN PC14 LSI is turned off here to ensure that only one clock is turned on */RCC_EnableLsi(DISABLE); RCC_ConfigLse(RCC_LSE_ENABLE,0x28);while (RCC_GetFlagStatus(RCC_LDCTRL_FLAG_LSERD) == RESET){}RCC_ConfigRtcClk(RCC_RTCCLK_SRC_LSE);/* Enable the RTC Clock */RCC_EnableRtcClk(ENABLE);RTC_WaitForSynchro();
}void BKP_WriteBkpData(uint32_t BKP_DAT, uint32_t Data)
{__IO uint32_t tmp = 0;/* Check the parameters */assert_param(IS_BKP_DAT(BKP_DAT));tmp = (uint32_t)&RTC->BKP1R;tmp += BKP_DAT;*(__IO uint32_t*)tmp = Data;
}uint32_t BKP_ReadBkpData(uint32_t BKP_DAT)
{__IO uint32_t tmp = 0;uint32_t value = 0;/* Check the parameters */assert_param(IS_BKP_DAT(BKP_DAT));tmp = (uint32_t)&RTC->BKP1R;tmp += BKP_DAT;value = (*(__IO uint32_t*)tmp);return value;
}
#ifndef __USER_RTCBKP_CONFIG_H__
#define __USER_RTCBKP_CONFIG_H__#define BKP_DAT1 ((uint16_t)0x0000)
#define BKP_DAT2 ((uint16_t)0x0004)
#define BKP_DAT3 ((uint16_t)0x0008)
#define BKP_DAT4 ((uint16_t)0x000C)
#define BKP_DAT5 ((uint16_t)0x0010)
#define BKP_DAT6 ((uint16_t)0x0014)
#define BKP_DAT7 ((uint16_t)0x0018)
#define BKP_DAT8 ((uint16_t)0x001C)
#define BKP_DAT9 ((uint16_t)0x0020)
#define BKP_DAT10 ((uint16_t)0x0024)
#define BKP_DAT11 ((uint16_t)0x0028)
#define BKP_DAT12 ((uint16_t)0x002C)
#define BKP_DAT13 ((uint16_t)0x0030)
#define BKP_DAT14 ((uint16_t)0x0034)
#define BKP_DAT15 ((uint16_t)0x0038)
#define BKP_DAT16 ((uint16_t)0x003C)
#define BKP_DAT17 ((uint16_t)0x0040)
#define BKP_DAT18 ((uint16_t)0x0044)
#define BKP_DAT19 ((uint16_t)0x0048)
#define BKP_DAT20 ((uint16_t)0x004C)#define IS_BKP_DAT(DAT) \(((DAT) == BKP_DAT1) || ((DAT) == BKP_DAT2) || ((DAT) == BKP_DAT3) || ((DAT) == BKP_DAT4) \|| ((DAT) == BKP_DAT5) || ((DAT) == BKP_DAT6) || ((DAT) == BKP_DAT7) || ((DAT) == BKP_DAT8) \|| ((DAT) == BKP_DAT9) || ((DAT) == BKP_DAT10) || ((DAT) == BKP_DAT11) || ((DAT) == BKP_DAT12) \|| ((DAT) == BKP_DAT13) || ((DAT) == BKP_DAT14) || ((DAT) == BKP_DAT15) || ((DAT) == BKP_DAT16) \|| ((DAT) == BKP_DAT17) || ((DAT) == BKP_DAT18) || ((DAT) == BKP_DAT19) || ((DAT) == BKP_DAT20) )#define BACKUP_REGISTER_SIZE 20extern uint16_t BKP_Datas[BACKUP_REGISTER_SIZE];
extern uint32_t Read_Backup_Datas[BACKUP_REGISTER_SIZE];extern void BKP_WriteBkpData(uint32_t BKP_DAT, uint32_t Data);
extern uint32_t BKP_ReadBkpData(uint32_t BKP_DAT);
extern void User_RTCBKP_Init(void);#endif /* __USER_RTCBKP_CONFIG_H__ */
/*** @}*/
#include "main.h"
#include "usart.h"
#include "n32l40x_flash.h"
#include "User_RTCBKP_Config.h"#ifdef USE_FULL_ASSERT
void assert_failed(const uint8_t* expr, const uint8_t* file, uint32_t line)
{while (1){}
}
#endif#define USE_USARTint main(void)
{int i = 0;#ifdef USE_USARTUSART2_Configuration();#endifUser_RTCBKP_Init();for(i=0;i<BACKUP_REGISTER_SIZE;i++){Read_Backup_Datas[i]=BKP_ReadBkpData(BKP_Datas[i]);printf("BKP_DAT%u=%d\r\n",i+1,(unsigned int)Read_Backup_Datas[i]);}for(i=0;i<BACKUP_REGISTER_SIZE;i++){BKP_WriteBkpData(BKP_Datas[i], i);}
}
串口打印如下:
第一次上电
BKP_DAT1=0
BKP_DAT2=0
BKP_DAT3=0
BKP_DAT4=0
BKP_DAT5=0
BKP_DAT6=0
BKP_DAT7=0
BKP_DAT8=0
BKP_DAT9=0
BKP_DAT10=0
BKP_DAT11=0
BKP_DAT12=0
BKP_DAT13=0
BKP_DAT14=0
BKP_DAT15=0
BKP_DAT16=0
BKP_DAT17=0
BKP_DAT18=0
BKP_DAT19=0
BKP_DAT20=0
NRST脚复位
BKP_DAT1=0
BKP_DAT2=1
BKP_DAT3=2
BKP_DAT4=3
BKP_DAT5=4
BKP_DAT6=5
BKP_DAT7=6
BKP_DAT8=7
BKP_DAT9=8
BKP_DAT10=9
BKP_DAT11=10
BKP_DAT12=11
BKP_DAT13=12
BKP_DAT14=13
BKP_DAT15=14
BKP_DAT16=15
BKP_DAT17=16
BKP_DAT18=17
BKP_DAT19=18
BKP_DAT20=19
相关文章:
国民技术RTC备份寄存器RTC_BKP
根据手册资料知道RTC_BKP的地址,代码如下 #include "main.h" #include "usart.h"void USART2_Configuration(void) {USART_InitType USART_InitStructure;GPIO_InitType GPIO_InitStructure;GPIO_InitStruct(&GPIO_InitStructure);RCC_Ena…...
resnet网络特征提取过程可视化
我们在训练图片时,是不是要看看具体提取时的每个特征图提取的样子,找了很多,终于功夫不负有心人,找到了,通过修改的代码: resnet代码: import torch import torch.nn as nn from torchvision…...
FPGA打砖块游戏设计(有上板照片)VHDL
这是一款经典打砖块游戏,我们的努力让它更精致更好玩,我们将它取名为打砖块游戏(Flyball),以下是该系统的一些基本功能: 画面简约而经典,色彩绚丽而活泼,动画流畅 玩家顺序挑战3个不同难度的级别,趣味十足 计分功能,卡通字母数字 4条生命值,由生命条显示…...
【Unity入门】3D物体
【Unity入门】3D物体 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)物体移动旋转缩放 (1)物体移动 在上一篇文章【Unity入门】场景视图操作我们学会了在场景中创建3…...
网络现代化势在必行,VMware 发布软件定义网络 SD-WAN 全新方案
出品 | CSDN云计算 作为计算存储网络基础设施三大件之一,网络一直是 IT 核心技术,并不断向前发展。 数字化转型浪潮下,各行业都在探索创新应用,而数字化创新,也是对 5G 和云边端等网络基础设施提出更高需求,…...
java学习笔记——抽象类
2.1 概述 由来 父类中的方法,被他的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有主体的方法称为抽象方法。java语法规定,包含抽象…...
Redis删除策略
删除策略就是针对已过期数据的处理策略。 针对过期数据要进行删除的时候都有哪些删除策略呢? 1.定时删除2.惰性删除3.定期删除1、立即删除 当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。 优点:节…...
【新星计划2023】SQL SERVER (01) -- 基础知识
【新星计划2023】SQL SERVER -- 基础知识1. Introduction1.1 Official Website1.2 Conn Tool2. 基础命令2.1 建库建表2.2 Alter2.3 Drop2.3 Big Data -- Postgres3.Awakening1. Introduction 1.1 Official Website 官方文档(小技巧) Officail Website: …...
nginx配置详解
一.nginx常用命令1.Windows(1).查看nginx的版本号nginx -v(2).启动nginxstart nginx(3).快速停止或关闭nginxnginx -s stop(4).正常停止或关闭nginxnginx -s quit(5).配置文件nginx.conf修改重装载命令nginx -s reload2.Linux(1).进入 nginx 目录中cd /usr/local/nginx/sbin(2)…...
关于Java中堆和栈的学习
文章目录1.概述1.1 堆1.2 栈2.堆内存2.1 什么是堆内存?2.2堆内存的特点是什么?2.3new对象在堆中如何分配?3.栈内存3.1什么是栈内存?3.2栈内存的特点3.3栈内存的内存分配机制3.4数据共享4.栈与堆的区别4.1差异4.2相同5. 面试题: java堆和栈的区别**申请方式****申请后系统的…...
ORBSLAM3 --- 闭环及地图融合线程
目录 1.闭环及地图合并线程的目的和意义 2.闭环及地图合并流程 3.ORBSLAM3中的闭环与地图融合线程解...
libvirt零知识学习6 —— libvirt源码编译安装(4)
接前一篇文章libvirt零知识学习5 —— libvirt源码编译安装(3) 上一篇文章中解决了YAJL包的编译时依赖问题。但是在解决后再次执行meson build时又遇到了新的错误“ERROR: Program rst2html5 rst2html5.py rst2html5-3 not found or not executable”。本…...
数据仓库相关面试题
1.请介绍一下星型模型和雪花模型的区别及适用场景。 星型模型和雪花模型是数据仓库中常见的两种数据建模方式。 星型模型是由一个中心事实表和多个与之相关的维度表构成的,维度表通常只有一层,每个维度表只关联一个事实表。在星型模型中,事实…...
2023年PMP考试前两个月开始备考时间足够吗?
够了,PMP真的不难,目前的考试都只有选择题,往后可能会增加别的题型, PMP新版大纲加入了ACP敏捷管理的内容,而且还不少,敏捷混合题型占到了 50%,2023年8月将启用第七版《PMBOK》,大家…...
56 | fstab开机挂载
1 fstab的参数解析 【file system】【mount point】【type】【options】【dump】【pass】 其中: file systems:要挂载的分区或存储设备。 mount point:file systems 的挂载位置。 type:要挂载设备或是分区的文件系统类型&…...
看齐iOS砍掉祖传功能,Android 16G内存也危险了
手机内存发展是真的迅速,12GB 没保持几年现在又朝着 16GB 普及。 相比 iOS 的墓碑机制,Android 后台就主打一个真实,只是可惜 APP 不那么老实。 如果你较早接触 Android 机,各种系统管理、优化 APP 的一键加速、清理应该还历历在…...
LeetCode 1012. Numbers With Repeated Digits【数位DP,数学】困难
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
信息系统项目管理师 第4章 信息系统管理
1.管理方法 1.管理基础 1.层次结构 信息系统是对信息进行采集、处理、存储、管理和检索,形成组织中的信息流动和处理,必要时能向有关人员提供有用信息的系统。 信息系统之上是管理,它监督系统的设计和结构,并监控其整体性能。 …...
JVM系统优化实践(11):GC如何搞垮线上系统
您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~看了那么多G1 GC的传说,再来看看怎么预防GC把工程师精心设计的系统给搞垮。在JVM的运行过程中,既有创建对象,又有GC࿰…...
统计软件与数据分析—Lesson2
jupyter Note环境配置,安装及使用以及python数据的读取操作统计软件与数据分析—Lesson21.Jupyter Note环境配置,安装及使用1.1 Jupyter Note 基本操作1.2 Notebook中的Magic开关1.2.1 Magic开关总览1.2.2 Line Magic 全局1.2.3 Cell Magic 当前cell1.3 …...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
