STM32备份寄存器的配置与使用
1.前言
嵌入式系统设计中,用来存储系统运行过程中的数据有很多种方式,而使用STM32的备份寄存器可以实现对少量数据的频繁存储。
因为这种方式时将数据存储在RAM中,掉电则数据丢失,所以需要使用备份电源为芯片供电;也由于是在RAM中,理论上可以无限次存取。
2.配置
- 首先需要添加stm32f10x_bkp.c文件和stm32f10x_pwr.c文件添加到工程的库文件FWLib当中;
- 其次在 RCC_Configuration( ) 函数中添加以下配置代码;
/* Enable PWR(电源控制) and BKP clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Enable write access to Backup domain */
PWR_BackupAccessCmd(ENABLE);
/* Clear Tamper pin Event(TE) pending flag */
BKP_ClearFlag();
3.读写数据
在stm32f10x_bkp.c文件中有如下函数,分别为写寄存器和读寄存器
实际使用中我们可以使用一些改造后的函数:
void WriteBKP(u16 Data,u8 DRNumber)
{
switch(DRNumber)
{
case 0x01:
BKP_WriteBackupRegister(BKP_DR1,Data);
break;
case 0x02:
BKP_WriteBackupRegister(BKP_DR2,Data);
break;
case 0x03:
BKP_WriteBackupRegister(BKP_DR3,Data);
break;
case 0x04:
BKP_WriteBackupRegister(BKP_DR4,Data);
break;
case 0x05:
BKP_WriteBackupRegister(BKP_DR5,Data);
break;
case 0x06:
BKP_WriteBackupRegister(BKP_DR6,Data);
break;
case 0x07:
BKP_WriteBackupRegister(BKP_DR7,Data);
break;
case 0x08:
BKP_WriteBackupRegister(BKP_DR8,Data);
break;
case 0x09:
BKP_WriteBackupRegister(BKP_DR9,Data);
break;
default:
BKP_WriteBackupRegister(BKP_DR1,Data);
break;
}
}
3.数据写入与读取举例
将a1,a2的值写入寄存器1和寄存器2:
int a1 = 1, a2 = 2;
WriteBKP(a1,1); //写入RAM
WriteBKP(a2,2);
将a1,a2的值从寄存器读出并赋给b1,b2:
int b1, b2;
b1 = BKP_ReadBackupRegister(BKP_DR1); //读出
b2 = BKP_ReadBackupRegister(BKP_DR2);