BKP读写备份寄存器
一.BKP基本定义.
BKP备份寄存器:可用于存储用户应用程序数据.
VBAT:VDD电源被切由VBAT(备用电池电源)供电。
TAMPER引脚:可以产生的侵入事件将备份寄存器内容清除
RTC引脚:输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲
BKP容量:20字节(中容量、小容量)/84字节(大容量、互联型)
二.BKP基本流程
开启PWR,BKP时钟
RCC_APB1PeriphClockCmd (RCC_APB1Periph_PWR ,ENABLE);//开启PWR时钟RCC_APB1PeriphClockCmd (RCC_APB1Periph_BKP ,ENABLE);//开启BPK时钟
使能PWR备份访问控制
PWR_BackupAccessCmd (ENABLE);//使能PWR
写BKP寄存器
BKP_WriteBackupRegister();
读BKP寄存器
BKP_ReadBackupRegister();
三.代码实现
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"
uint8_t KeyNum;//定义一个接收按键返回值
uint16_t ArrayWrite[] = {0x1234,0x5678};//定义一个写入数组
uint16_t ArrayRead[2];//定义一个接收数组
int main(void)
{
OLED_Init ();//OLED函数
Key_Init ();//Key函数
OLED_ShowString (1,1,"W:");
OLED_ShowString (2,1,"R:");
//开启时钟
RCC_APB1PeriphClockCmd (RCC_APB1Periph_PWR ,ENABLE);//开启PWR时钟
RCC_APB1PeriphClockCmd (RCC_APB1Periph_BKP ,ENABLE);//开启BPK时钟
//使能
PWR_BackupAccessCmd (ENABLE);//使能PWR
while(1)
{
KeyNum = Key_GetNum ();//使用KeyNum接收Key按键返回值
if(KeyNum ==1)//
{
ArrayWrite [0] ++;
ArrayWrite [1] ++;//按键按下写入数据自增
BKP_WriteBackupRegister(BKP_DR1,ArrayWrite [0]);//写入BKP数组0数据
BKP_WriteBackupRegister(BKP_DR2,ArrayWrite [1]);//写入BKP数组1数据
OLED_ShowHexNum (1,3,ArrayWrite [0],4);
OLED_ShowHexNum (1,8,ArrayWrite [1],4);
}
ArrayRead[0] = BKP_ReadBackupRegister(BKP_DR1);//读取写入BKP数组0数据
ArrayRead[1] = BKP_ReadBackupRegister(BKP_DR2);//读取写入BKP数组1数据
OLED_ShowHexNum (2,3,ArrayRead [0],4);
OLED_ShowHexNum (2,8,ArrayRead [1],4);
}
}