请选择 进入手机版 | 继续访问电脑版
    查看: 185|回复: 2

    [单片机资料] stm32备份寄存器之读写数据测试

    [复制链接]

    签到天数: 414 天

    [LV.9]元老将成

    发表于 2018-9-13 22:28:12 | 显示全部楼层 |阅读模式
    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程序会初始化备份寄存器中的数据),浪费了点时间才找到原因所在。

    签到天数: 693 天

    [LV.9]元老将成

    发表于 2018-9-14 13:37:44 | 显示全部楼层
    不错的资料
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    返回顶部