1. 程式人生 > >stm32 備份暫存器 讀寫資料

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程式會初始化備份暫存器中的資料),浪費了點時間才找到原因所在。