STM32学习笔记 & 备份寄存器BKP 02

备份寄存器BKP

BKP简介

  1. 备份寄存器是4216位的寄存器,可用来存储84个字节的用户应用程序数据 (中小容量20字节,大容量84字节)

  2. 他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电

  3. 当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位

  4. 此外,BKP控制寄存器用来管理侵入检测和RTC校准功能

BKP特性 

复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作

执行以下操作可以使能对备份寄存器和RTC的访问

int main()
{
    __HAL_RCC_BKP_CLK_ENABLE();//使能备份寄存器时钟

    __HAL_RCC_PWR_CLK_ENABLE();//使能电源管理时钟

    HAL_PWR_EnableBkUpAccess();//使能对后备寄存器和RTC的访问
}

用来管理防侵入检测并具有中断功能的状态/控制寄存器

用来存储RTC校验值的校验寄存器

在PC13引脚(当该引脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲

备份数据寄存器(BKP_DR)

用来存储用户数据,由VBAT供电保持数据

int mian()
{
    HAL_PWR_EnableBkUpAccess();//使能对后备寄存器和RTC的访问
    /*备份数据寄存器数据写入API*/
    HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data);
    /*备份数据寄存器数据读出API*/
    HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister);
}    

BKP_DRx寄存器不会被系统复位、电源复位、从待机模式唤醒所复位

它们可以由备份域复位来复位或(如果侵入检测引脚TAMPER功能被开启时)由侵入引脚事件复位

//软件复位整个备份域
__HAL_RCC_BACKUPRESET_FORCE();//激活备份域复位
__HAL_RCC_BACKUPRESET_RELEASE();//释放复位

使能浸入检测需要关闭RTC校准时钟,RTC闹钟脉冲或者秒脉冲
/*配置并使能侵入检测*/
HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper);
/*配置并使能侵入检测及侵入中断*/
HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper);
/*失能侵入检测并关闭中断*/
HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper);

void TAMPER_IRQHandler(void)//系统中断入口
{
    HAL_RTCEx_TamperIRQHandler(RTC_HandleTypeDef *hrtc);//侵入中断服务函数
}

void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc)
{
    /*侵入事件中断回调函数*/
}

备份寄存器BKP常用HAL库LIST

stm32f1xx_hal_rtc_ex.c

//配置并使能侵入检测功能
HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper);
//配置并使能侵入检测功能(开启中断)
HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper);
//失能侵入检测并关闭中断
HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper);
//轮询方式查询入侵事件
HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout);

//使能RTC秒中断
HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc);
//失能RTC秒中断
HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc);

void RTC_IRQHandler(void)//秒中断系统中断入口
{
    HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc);//秒中断及溢出中断服务函数
}

//秒中断错误溢出中断回调
void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc);
//秒中断回调
void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc);

//后备数据寄存器读写函数
HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data);
HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister);

//设置RTC时钟校准值
HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, NULL,NULL,uint32_t SmouthCalibMinusPulsesValue);

stm32f1xx_hal_rtc_ex.h

//使能溢出中断
#define __HAL_RTC_OVERFLOW_ENABLE_IT();
//失能溢出中断
#define __HAL_RTC_OVERFLOW_DISABLE_IT();

Author :HU&DA

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值