1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 国民技术RTC备份寄存器RTC_BKP

国民技术RTC备份寄存器RTC_BKP

时间:2022-06-06 20:07:52

相关推荐

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。