如何使用STM32的备份寄存器
如何使用STM32的备份寄存器1。简介一些STM32微控制器具有备份寄存器。这些寄存器可以被写入/读取和保护,并且可以在VDD域断电时选择保留在VBAT模式下。。。。
如何使用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.步骤
-
打开STM32CubIDE
-
使用NUCLEO-L496ZG板创建新项目
-
为项目命名

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

-
启用RTC

-
生成代码
项目->生成代码
-
添加代码
我们需要启用RTC时钟,因为备份寄存器是RTC的一部分。这是在RTC配置功能上完成的。
要读取备份寄存器,请使用HAL函数调用HAL_RTCEx_BKUPRead。
要能够写入备份寄存器:
- 启用PWR时钟(这已经在HAL Init功能中完成)
- 启用对备份域的访问
- 进行HAL函数调用以写入数据:HAL_RTCEx_BKUPWrite
- 重新保护备份域
/*用户代码开始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;//转动LED2 HAL_GPIO_WritePin(GPIOB、LD2_Pin、GPIO_Pin_SET);}否则{//数据寄存器已写入,因此将LED3 HAL_GPIO_WritePin(GPIOB、LD3_Pin、GPIO_Pin_SET);}/*用户代码结束2*/HAL_PWR_禁用BkUpAccess();
-
构建项目,进入调试模式并运行代码
项目构建完成后,进入调试会话以刷新代码。
现在,我们可以通过单击红色方块图标来终止调试会话。
这将退出调试会话,然后执行代码。您应该看到蓝色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。。。