自学内容网 自学内容网

STM32-笔记40-BKP(备份寄存器)

一、什么是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.h"

int 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.h"

RTC_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.h"

void rtc_init(void);
uint16_t rtc_read_bkr(uint8_t bkrx);
void rtc_write_bkr(uint8_t bkrx, uint16_t data);

#endif

实现结果:


原文地址:https://blog.csdn.net/L_1068/article/details/145075546

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!