stm32 备份寄存器 读写数据

1. 首先 检查RTC电池是否装载,没电池的话,设备掉电也保存不了数据。

 备份寄存器就是普通的RAM,需要配合外接电池使用,如果没有电池,就不能掉电保持数据。
 因为是普通RAM,所以不存在写入次数的问题,理论上是无限次的。

其次在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();

2. 然后就可以开始读写功能了。

void WriteBKP(u16 Data,u8 DRNumber)       // 还可加入一些加密算法;DRNumber (1-9)
{
    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;

                 case 0x10:                 
                BKP_WriteBackupRegister(BKP_DR10,Data); 
                
                break;

        default:    

                        BKP_WriteBackupRegister(BKP_DR1,Data);

    }
    BKP_WriteBackupRegister(BKP_DR10,CHECK_CODE);

}

u8 CheckBKP(void)

{
    if( BKP_ReadBackupRegister(BKP_DR1) == 0x89)   // 如果此位数据丢失,则BPK数据丢失

        return 1;
    else
        return 0;
}

3.调试总结:

可以在IAR或者keil的watch 中查看值是否写入,输入BKP_DR1,可以查看BKP_DR1中的数据是否写入正确,其他的备份寄存器类似操作。

另外在程序中有RTC程序的话,要注意配置顺序,因为RTC也对备份寄存器操作。我就是程序中有RTC程序,所以写入的数据老是被清零(RTC程序会初始化备份寄存器中的数据),浪费了点时间才找到原因所在。




  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值