国民技术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相关推荐
- stm32 hal库 rtc 备份 寄存器 备份sram 调试笔记
rtc 是可以单独供电的,通常设计rtc是带有一个纽扣电池用来给rtc供电.本次是调试rtc 的备份寄存器和备份sram,这两个都是可以在rtc不断电情况下一直保存数据. 步骤 配置rtc参数,用cu ...
- STM32 之七 备份域(备份寄存器、备份SRAM)详解及数据丢失问题处理
某些STM32芯片提供了备份SRAM,例如STM32F系列芯片有4K的备份SRAM.然而在使用过程中发现备份区域数据丢失!下面从STM32系列芯片提供的整个备份域来看看啥情况. 电池备份域 首先, ...
- STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读
记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...
- STM32 备份寄存器操作
STM32系列为处理器都有备份寄存器,他它们处于备份区域里,当VDD电源被切断,它们仍然由VBAT维持供电,当系统在待机模式下被唤醒,或者系统复位或电源复位是,它们都不会被复位.以实时时钟RTC为例, ...
- stm32之备份寄存器(BKP)应用(侵入检测中断)
前言:很多的嵌入式设备使用过程中,当系统掉电时,往往需要把一些用户设置的参数保存起来,或者是将掉电前的一些状态信息保存,或者是统计系统重启次数.保存这些动态信息其实有很多种方法,第一种:在系统掉电前保 ...
- 28_RTC实时时钟BKP备份寄存器
目录 RTC(Real Time Clock):实时时钟 RTC特征 RTC工作原理框图 BKP备份寄存器 RTC相关寄存器 配置RTC寄存器 配置过程: 读RTC寄存器 RTC相关库函数讲解 RTC ...
- 【STM32】HAL库-备份寄存器(BKP)
简介 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据. 他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电. 当系统在待机模式下被唤醒,或系统复位或电源复位时, ...
- stm32F103R6之BKP(备份寄存器)
目录 概述 侵入检测 RTC校准 概述 Stm32F103有42个16位的备份寄存器.他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电.当系统在待机模式下被唤醒,或系统复位或电源复位时 ...
- STM32CubeMX HAL F103 BKP备份寄存器使用
STM32CubeMX HAL F103 BKP备份寄存器使用 以下是本人自己的应用笔记,如果有错误的地方,欢迎评论区指出,我会及时更正-[2021.09.28] 1.需要开启RTC功能 2.API调 ...
最新文章
- luoguP4503 [CTSC2014]企鹅QQ hash
- java多线程遇到的问题_关于Java多线程遇到的问题.
- UIDocumentInteractionController 文件预览
- 求职者被字节HR放鸽子?
- oracle如何查询排行第二,Oracle优化查询改写(第二章-给查询结果排序)
- oracle mysql 数据类型对比_Oracle、SQL Server、MySQL数据类型对比
- 南昌大学c语言程序设计,南昌大学C语言程序设计试卷C语言2.doc
- 我对Laravel ThinkPHP Yii symfony2 CI cakephp 的看法
- 局域网通信c语言,C语言编写的仿QQ局域网通讯程序.pdf
- 【scrapy】scrapy按分类爬取豆瓣电影基础信息
- html超链接下划线改虚线_CSS和html中超链接去掉下划线的方法总结
- uclinux和linux的使用区别,基于uClinux和Linux的对比分析
- 记录一次 AGP 调研过程中的思考,我从一个事故搞出了一个故事!
- 关于SimpleDateFormat日期格式与字符串、时间戳之间的转换
- 数据库的建立视图、视图的作用
- php调用原生java程序
- 没有最好只有更好,本届云栖大会的无线网络如何创造奇迹?
- 企业十四种主要融资方式
- 解决IDEA里提示Spring Configuration Check “Unmapped Spring configuration files found.的问题
- 【运维工程师必备技能之一】——英语基础
热门文章
- Mac安装Mysql卡在最后一步
- Python基于OpenCV的图像去雾算法[完整源码&部署教程]
- JavaScript 文件下载解决方案-download.js
- java创建简单的学生类_Java创建一个学生类步骤代码分享
- 2021地理高考成绩查询,安徽高考成绩查分时间2021
- CreateThread和_beginthread区别及使用http://blog.csdn.net/wxq1987525/article/details/6620210
- 偏安一隅的SaaS客服机会在哪,难点又在哪?
- 科研实验用,TPGS-COOH羧基修饰维生素E聚乙二醇琥珀酸酯
- CAS:1818880-26-0,4-Arm PEG-AC,四臂-聚乙二醇-丙烯酸酯试剂供应
- 神经网络matlab实现