BKP外设
- 防侵入检测
- 数据复位后不丢失
- RTC时钟校准
BKP结构
数据后备寄存器:20字节(中容量和小容量产品),84字节(大容量和互联型产品).
TAMPER引脚:防侵入检测功能。
RTC始终校准寄存器:可用来存储RTC校验值。
初始化流程
- 开启RCC时钟:PWR和BKP
- 使能对BKP和RTC的访问:PWR_BackupAccessCmd(ENABLE)
- BKP读写数据:中容量BKP_DRx只有 1~10
标准库函数使用模板
BKP初始化
void BKP_init(){
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);//开启PWR和BKP时钟
//使能对BKP和RTC的访问
PWR_BackupAccessCmd(ENABLE);
}
//BKP读写数据
BKP_WriteBackupRegister(BKP_DR1, 0x1234);//中容量BKP_DRx只有1~10
BKP_ReadBackupRegister(BKP_DR1);
BKP配置函数
// 检测外部侵入引脚(TAMPER)高低电平
void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel);
// 使能外部入侵检测
void BKP_TamperPinCmd(FunctionalState NewState);
// RTC校准
void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource);
// 配置RTC校准值
void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue);
BKP寄存器/标志位读写
/* BKP_WriteBackupRegister 写数据寄存器
* @ param1 选择 DRx [0~10] / [0~42]
* @ param2 待写入的数据
* @ retval None
*/
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);
/* BKP_WriteBackupRegister 读数据寄存器
* @ param1 选择 DRx [0~10] / [0~42]
* @ retval DRx中的数据
*/
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);
/* BKP_GetFlagStatus 获取Tamper引脚挂起标志位
* @ param1 None
* @ retval SET / RESET
*/
FlagStatus BKP_GetFlagStatus(void);
/* BKP_ClearFlag 清空Tamper引脚挂起标志位
* @ param1 None
* @ retval None
*/
void BKP_ClearFlag(void);
BKP_NVIC中断函数
void BKP_ITConfig(FunctionalState NewState);
ITStatus BKP_GetITStatus(void);
void BKP_ClearITPendingBit(void);
------ BY Flier
2023.9.8
Reference:江协科技、《stm32f10x用户手册》、《stm32库开发实战指南教程》