STM32入门——读写备份寄存器(19)

STM32入门——读写备份寄存器(19)

BKP简介

  • BKP(Backup Registers )备份寄存器

  • BKP可用于存储用户应用程序数据。当VDD(2.03.6V)电源被切断,他们仍然由VBAT(1.83.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。

  • TAMPER引脚产生的侵入事件将所有备份寄存器内容清除。

  • RTC引脚输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲

  • 存储RTC时钟校准寄存器

  • 用户数据存储容量:

    20字节(中容量和小容量)/ 84字节(大容量和互联型)

image-20260405175212532

实现代码:

#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"

uint8_t KeyNum; // 定义用于接收按键键码的变量

uint16_t ArrayWrite[] = {0x1234, 0x5678}; // 定义要写入数据的测试数组
uint16_t ArrayRead[2];					  // 定义要读取数据的测试数组

int main(void)
{
	/*模块初始化*/
	OLED_Init(); // OLED初始化
	Key_Init();	 // 按键初始化

	/*显示静态字符串*/
	OLED_ShowString(1, 1, "W:");
	OLED_ShowString(2, 1, "R:");

	/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 开启PWR的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE); // 开启BKP的时钟

	/*备份寄存器访问使能*/
	PWR_BackupAccessCmd(ENABLE); // 使用PWR开启对备份寄存器的访问

	while (1)
	{
		KeyNum = Key_GetNum();  // 获取按键键码

		if (KeyNum == 1)        // 按键1按下
		{
			ArrayWrite[0]++;    // 测试数据自增
			ArrayWrite[1]++;

			BKP_WriteBackupRegister(BKP_DR1, ArrayWrite[0]); // 写入测试数据到备份寄存器
			BKP_WriteBackupRegister(BKP_DR2, ArrayWrite[1]);

			OLED_ShowHexNum(1, 3, ArrayWrite[0], 4);         // 显示写入的测试数据
			OLED_ShowHexNum(1, 8, ArrayWrite[1], 4);
		}

		ArrayRead[0] = BKP_ReadBackupRegister(BKP_DR1);      // 读取备份寄存器的数据
		ArrayRead[1] = BKP_ReadBackupRegister(BKP_DR2);

		OLED_ShowHexNum(2, 3, ArrayRead[0], 4);              // 显示读取的备份寄存器数据
		OLED_ShowHexNum(2, 8, ArrayRead[1], 4);
	}
}

参考资料:STM32单片机的BKP和RTC(备份寄存器和实时时钟) - 指南 - gccbuaa - 博客园

posted @ 2026-04-05 17:53  Q&25  阅读(4)  评论(0)    收藏  举报