网站性能,wordpress添加qq交谈,做信息采集的网站,文艺小清新ppt模板一、什么是BKP#xff08;备份寄存器#xff09;#xff1f;
备份寄存器是42个16位的寄存器#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里#xff0c;当VDD电源被切断#xff0c;他们仍然由VBAT维持供电。当系统在待机模式下被唤醒#xff0c;或…一、什么是BKP备份寄存器
备份寄存器是42个16位的寄存器可用来存储84个字节的用户应用程序数据。他们处在备份域里当VDD电源被切断他们仍然由VBAT维持供电。当系统在待机模式下被唤醒或系统复位或电源复位时他们也不会被复位。 此外 BKP控制寄存器用来管理侵入检测和RTC校准功能。 复位后对备份寄存器和RTC的访问被禁止并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问 通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟 电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。 用户数据存储容量 20字节中容量和小容量/ 84字节大容量和互联型
二、BKP框图 三、读写BKP
复制项目文件19-串口打印功能
重命名为53-BKP读写 打开项目
加载文件 bkp与rtc的关系
BKP是控制寄存器用来管理侵入检测和RTC校准功能。存储RTC的校验值或者记录一些重要的数据。
main.c
#include sys.h
#include delay.h
#include led.h
#include uart1.h
#include rtc.hint main(void)
{HAL_Init(); /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init(); /* 初始化LED灯 */uart1_init(115200);rtc_init();printf(hello world!\r\n);rtc_write_bkr(1, 0xA5A5);//写进去一个内容//读出来一个内容printf(读出来的值为%X\r\n, rtc_read_bkr(1));//以十六进制的方式进行打印while(1){ }
}rtc.c
#include rtc.hRTC_HandleTypeDef rtc_handle {0};
//初始化rtc因为bkp依赖于rtc
void rtc_init(void)
{__HAL_RCC_PWR_CLK_ENABLE();//使能电源时钟__HAL_RCC_BKP_CLK_ENABLE();//使能bkp时钟HAL_PWR_EnableBkUpAccess();//允许访问备份域rtc_handle.Instance RTC;rtc_handle.Init.AsynchPrediv 32767;rtc_handle.Init.OutPut RTC_OUTPUTSOURCE_NONE;HAL_RTC_Init(rtc_handle);
}
//读rtc,读出来是2个字符16个字节十六位寄存器bkrx指定读的是哪个寄存器
uint16_t rtc_read_bkr(uint8_t bkrx)
{uint32_t data 0;//读bkp寄存器data HAL_RTCEx_BKUPRead(rtc_handle, bkrx);return (uint16_t)data;
}
//写rtc写进哪个寄存器bkrx写进去什么data
void rtc_write_bkr(uint8_t bkrx,uint16_t data)
{//写bkp寄存器HAL_RTCEx_BKUPWrite(rtc_handle, bkrx, data);
}rtc.h
#ifndef __RTC_H__
#define __RTC_H__#include sys.hvoid rtc_init(void);
uint16_t rtc_read_bkr(uint8_t bkrx);
void rtc_write_bkr(uint8_t bkrx, uint16_t data);#endif实现结果