一.介绍
STM32掉电保存配置参数的方式有很多,可以外接EEPROM,也可以使用FLASH,前两种就不介绍了,这里笔者说一下使用芯片内置的备份寄存器(BKP)来实现。
使用备份寄存器的跟前两种相比,优点是不需要外设,但是缺点也很明显,由于适用的是内置寄存器,能存储的数据也不多。
重点说明,备份寄存器并非完全不需要电源,上面的芯片图有个VBAT引脚就是连接电源的,只需要在开发板上连接一个纽扣电池就可以了。
二.使用方法
1.初始化
备份寄存器并不是普通SRAM或Flash,它是RTC外设的一部分,他们存储在备用域,该域有独立电源VBAT供电,可以在MCU复位或断电后保存数据。
void BKPSRAM_int(void)
{
// 1. 使能PWR时钟
__HAL_RCC_BKPRAM_CLK_ENABLE();
// 2. 允许访问备份寄存器
HAL_PWR_EnableBkUpAccess();
// 3. 允许备份寄存器掉电保存
HAL_PWREx_EnableBkUpReg();
}
RTC_HandleTypeDef hrtc; /* 这个一定要,操作寄存器需要RTC的句柄*/
/* RTC时钟的初始化可要可不要,有些STM32系列RTC时钟必须启用,一定要确保RTC有时钟源 */
void RTC_Init_Backup(void)
{
// 1. 使能 RTC 时钟
__HAL_RCC_RTC_ENABLE();
// 2. RTC 初始化(可用默认参数,主要保证 Backup Registers 可用)
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
}
2.读写
在HAL库中,读写备份寄存器使用是HAL_RTCEx_BKUPWrit,HAL_RTCEx_BKUPRead函数。
写函数有三个参数,一个是RTC句柄,一个是寄存器的编号,另一个是数据,我使用的stm32h7,总共就有32个寄存器。F1系列每个寄存器能存16位的数据,F2/F4/F7系列的寄存器可以存储32为数据。
/**
* @brief Write a data in a specified RTC Backup data register.
* @param hrtc RTC handle
* @param BackupRegister RTC Backup data Register number.
* This parameter can be: RTC_BKP_DRx where x can be from 0 to 31 to
* specify the register.
* @param Data Data to be written in the specified Backup data register.
* @retval None
*/
void HAL_RTCEx_BKUPWrite(const RTC_HandleTypeDef * hrtc, uint32_t BackupRegister, uint32_t Data)
//示例
HAL_RTCEx_BKUPWrite(&hrtc,0,1); //向寄存器0写入数据1
读函数只有两个参数,一个是句柄,一个就是寄存器编号。返回值就是数据。
/**
* @brief Read data from the specified RTC Backup data Register.
* @param hrtc RTC handle
* @param BackupRegister RTC Backup data Register number.
* This parameter can be: RTC_BKP_DRx where x can be from 0 to 31 to
* specify the register.
* @retval Read value
*/
uint32_t HAL_RTCEx_BKUPRead(const RTC_HandleTypeDef * hrtc, uint32_t BackupRegister)
//示例
uint32_t temp = HAL_RTCEx_BKUPRead(&hrtc,0);
————————————————
版权声明:本文为CSDN博主「德涵玉润」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hanhanhan233/article/details/152045039
|
|