1.BKP_DeInit函数的功能是将外设BKP的全部寄存器重设为默认值。
2.BKP_TamperPinLevelConfig函数的功能是设置侵入检测引脚的有效电平。
.BKP_TamperPinLevel可取的值有.BKP_TamperPinLevel_High/_Low.分别是检测高低电平。
3.BKP_TamperPinCmd函数的功能是使能或失能引脚的侵入检测功能。
BKP_TamperPinCmd(enable);
4.BKP_WriteBackupRegister函数的功能是想指定的后备寄存器中写入用户程序数据。他分别可以选用1~10不同的数据寄存器。
BKP_WriteBackupRegister(BKP_DR1,0XA587);
5.BKP_ReadBackupRegister函数的功能是从指定的后备寄存器中读出数据。
u16 Data;
Data = BKP_ReadBackupRegister(BKP_DR1);//从后备寄存器Register1中读出数据。
6.BKP_ClearITPendingBit函数的功能是清除侵入检测中断的待处理位。
BKP.H
#ifndef BKP_H
#define BKP_H
#include “DataType.h”
void InitBKP(void);
void WriteBKP(u8 DRNumber, u16 Data);
void ReadBKP(u8 DRNumber, u16* Data);
void PrintBKP(void);
u8 CheckBKP(void);
#endif
BKP.C
#include “BKP.h”
#include <stm32f10x_conf.h>
#include <stm32f10x_bkp.h> //或者到<stm32f10x_conf.h>里加上
#include <stm32f10x_pwr.h>
#include “stdio.h”
#define CHECK_CODE 0xAE86
void InitBKP(void)
{
PWR_BackupAccessCmd(ENABLE);
BKP_ClearFlag();
BKP_TamperPinLevelConfig(BKP_TamperPinLevel_Low);
BKP_ITConfig(ENABLE);
BKP_TamperPinCmd(ENABLE);
}
void ReadBKP(u8 DRNumber, u16 Data)
{
switch (DRNumber)
{
case 0x01: BKP_WriteBackupRegister(BKP_DR1, Data); break;
case 0x02: BKP_WriteBackupRegister(BKP_DR2, Data); break;
case 0x03: BKP_WriteBackupRegister(BKP_DR3, Data); break;
case 0x04: BKP_WriteBackupRegister(BKP_DR4, Data); break;
case 0x05: BKP_WriteBackupRegister(BKP_DR5, Data); break;
case 0x06: BKP_WriteBackupRegister(BKP_DR6, Data); break;
case 0x07: BKP_WriteBackupRegister(BKP_DR7, Data); break;
case 0x08: BKP_WriteBackupRegister(BKP_DR8, Data); break;
case 0x09: BKP_WriteBackupRegister(BKP_DR9, Data); break;
default: BKP_WriteBackupRegister(BKP_DR1, Data);
}
BKP_WriteBackupRegister(BKP_DR10, CHECK_CODE);
}
void ReadBKP(u8 DRNumber, u16 * Data)
{
switch (DRNumber)
{
case 0x01: *Data = BKP_ReadBackupRegister(BKP_DR1); break;
case 0x02: *Data = BKP_ReadBackupRegister(BKP_DR2); break;
case 0x03: *Data = BKP_ReadBackupRegister(BKP_DR3); break;
case 0x04: *Data = BKP_ReadBackupRegister(BKP_DR4); break;
case 0x05: *Data = BKP_ReadBackupRegister(BKP_DR5); break;
case 0x06: *Data = BKP_ReadBackupRegister(BKP_DR6); break;
case 0x07: *Data = BKP_ReadBackupRegister(BKP_DR7); break;
case 0x08: *Data = BKP_ReadBackupRegister(BKP_DR8); break;
case 0x09: *Data = BKP_ReadBackupRegister(BKP_DR9); break;
default: *Data = BKP_ReadBackupRegister(BKP_DR1); break;
}
}
void PrintBKP(void)
{
printf(“DR1 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR1));
printf(“DR2 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR2));
printf(“DR3 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR3));
printf(“DR4 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR4));
printf(“DR5 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR5));
printf(“DR6 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR6));
printf(“DR7 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR7));
printf(“DR8 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR8));
printf(“DR9 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR9));
printf(“DR10 = 0x%04X\t”, BKP_ReadBackupRegister(BKP_DR10));
}
u8 CheckBKP(void)
{
if (BKP_ReadBackupRegister(BKP_DR10) == 0xAE86) // 如果此位数据丢失,则BPK数据丢失
return 1;
else
return 0;
}
————————————————
版权声明:本文为CSDN博主「vstvr」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41862220/article/details/95479986