如何使用STM32的备份寄存器

1.简介

一些STM32微控制器具有备份寄存器。这些寄存器可以被写入/读取和保护,并且在VDD域关闭时可以选择保留在VBAT模式下。在本文中,我们将学习如何写入、读取和保护这些寄存器。
 

2.先决条件

  • 硬件:
    • Micro USB电缆用于从主机为Nucleo板供电,并将代码加载到STM32中。
    • 核苷酸-L496
  • 软件:STM32CubeIDE
 

3.理论

在这篇文章中,我们将使用Nucleo-L496 Nucleo上包含的STM32L496。STM32L496包括32个备份寄存器(每个32位),这些寄存器可以被写入/读取和保护,并包含在备份域中。该域还包括RTC,并且在VDD电源关闭时保持由VBAT供电(前提是VBAT保持供电)。在系统重置后,备份和RTC寄存器受到保护,不会发生寄生写入。我们将学习如何使用STM32Cube HAL驱动程序写入、读取和保护备份寄存器。
在这个代码示例中,它读取第一个备份数据寄存器,看看它以前是否写入过,如果没有,它将取消对备份域的保护并写入。一旦第一次执行代码,我们将使用连接到重置输入(NRST)的按钮重置STM32。由于备份域由硬件通过重置来保留,因此备份寄存器值将保持不变。

 

4.步骤 

  1. 打开STM32CubIDE

  2. 使用NUCLEO-L496ZG板创建新项目


  1. 为项目命名


 
  1. 使用默认设置初始化所有外围设备


 
  1. 启用RTC

备份寄存器是RTC外围设备的一部分,因此我们需要启用RTC才能访问它们。在Pinout&Configuration(引脚输出和配置)选项卡中,转至Timers(定时器),然后选择RTC(RTC),然后在RTC Mode and Configuration(RTC模式和配置)中。激活时钟源以启用RTC。

 
  1. 生成代码

项目->生成代码

  1. 添加代码

我们将添加用于检查第一个备份寄存器是否已写入的代码。如果它之前是用我们读回的正确数据写入的(0xBEBE),我们将打开LED3,如果不是,我们将取消保护备份寄存器并向其写入数据,保护它,然后打开LED2。
我们需要启用RTC时钟,因为备份寄存器是RTC的一部分。这是在RTC配置功能上完成的。
要读取备份寄存器,请使用HAL函数调用HAL_RTCEx_BKUPRead。
要能够写入备份寄存器:
  • 启用PWR时钟(这已经在HAL Init功能中完成)
  • 启用对备份域的访问
  • 进行HAL函数调用以写入数据:HAL_RTCEx_BKUPWrite
  • 重新保护备份域
以下是要在用户代码部分2中的main.c中添加的代码:
/*用户代码开始2*//检查备份寄存器1中存储的数据是否:无需写入,然后打开LED1//如果(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0xBEBE){//写入备份寄存器1数据HAL_PWR_EnableBkUpAccess();//将数据写入RTC备份数据寄存器1 HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0xBEBE;
HAL_PWR_禁用BkUpAccess();
//转动LED2 HAL_GPIO_WritePin(GPIOB、LD2_Pin、GPIO_Pin_SET);}否则{//数据寄存器已写入,因此将LED3 HAL_GPIO_WritePin(GPIOB、LD3_Pin、GPIO_Pin_SET);}/*用户代码结束2*/
  1. 构建项目,进入调试模式并运行代码


项目构建完成后,进入调试会话以刷新代码。


现在,我们可以通过单击红色方块图标来终止调试会话。


这将退出调试会话,然后执行代码。您应该看到蓝色LED2亮起,表示备份寄存器1的检查没有通过,然后我们向其写入了数据。
现在,如果您按下Nulceo的黑色重置按钮,这将重新执行代码,但这一次红色LED3将打开,表明备份寄存器的检查通过,因为它是以前写入的。
现在,如果您拔下并重新插入Nucleo板,代码将再次执行,这一次蓝色LED2将打开,因为备份域失去电源(没有向VBAT引脚提供电源),备份寄存器未被保留。为了能够在电源循环中保留备份寄存器,在VDD被移除时,VBAT必须保持通电,这被称为VBAT模式。


5.链接

STM32CubeIDE-STM32集成开发环境-STMicroelectronics
NUCLEO-L496ZG-STM32Nucleo-144开发板,带STM32L496ZGMCU,支持Arduino、ST Zio和。。。
STM32L47xxx、STM32L48xxx、STM22L49xxx和STM32L44xxx基于Arm®的高级32位MCU-参考手册。。。
产品介绍-STM32L496xx-超低功耗Arm®Cortex®-M4 32位MCU+FPU,100 DMIPS,高达1MB Flas。。。