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

国民技术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

http://www.lryc.cn/news/42081.html

相关文章:

  • resnet网络特征提取过程可视化
  • FPGA打砖块游戏设计(有上板照片)VHDL
  • 【Unity入门】3D物体
  • 网络现代化势在必行,VMware 发布软件定义网络 SD-WAN 全新方案
  • java学习笔记——抽象类
  • Redis删除策略
  • 【新星计划2023】SQL SERVER (01) -- 基础知识
  • nginx配置详解
  • 关于Java中堆和栈的学习
  • ORBSLAM3 --- 闭环及地图融合线程
  • libvirt零知识学习6 —— libvirt源码编译安装(4)
  • 数据仓库相关面试题
  • 2023年PMP考试前两个月开始备考时间足够吗?
  • 56 | fstab开机挂载
  • 看齐iOS砍掉祖传功能,Android 16G内存也危险了
  • LeetCode 1012. Numbers With Repeated Digits【数位DP,数学】困难
  • 信息系统项目管理师 第4章 信息系统管理
  • JVM系统优化实践(11):GC如何搞垮线上系统
  • 统计软件与数据分析—Lesson2
  • ISO体系认证全方位解析让!
  • 真要被00后职场整顿了?老员工纷纷表示真的干不过.......
  • NDK FFmpeg音视频播放器二
  • Linux之进程信号
  • AI绘画关键词网站推荐 :轻松获取百万个提示词!完全免费
  • Java-Collections and Lambda
  • KDGX-A光缆故障断点检测仪
  • 【刷题之路Ⅱ】牛客 NC107 寻找峰值
  • 智能灯泡一Homekit智能家居系列
  • 外包离职,历时学习416天,成功上岸百度,分享成长过程~
  • 利用客户支持建立忠诚度和竞争优势