STM32 之七 备份域(备份寄存器、备份SRAM)详解及数据丢失问题处理
某些STM32芯片提供了備份SRAM,例如STM32F系列芯片有4K的備份SRAM。然而在使用過程中發現備份區域數據丟失!下面從STM32系列芯片提供的整個備份域來看看啥情況。
電池備份域
??首先,這部分在參考手冊的電源(PWR)章節有詳細的介紹。器件的工作電壓 (VDD) 要求介于 1.8 V 到 3.6 V 之間。嵌入式線性調壓器用于提供內部 1.2 V數字電源。當主電源 VDD 斷電時,可通過 VBAT 電壓為實時時鐘 (RTC)、RTC備份寄存器 和 備份 SRAM(BKP SRAM) 供電。具體如下圖:
手冊中有許多對于使用芯片時對于電源部分設計的要求,例如引腳的使用、電流的要求等等,具體見手冊!
備份域訪問
??復位后,備份域(RTC 寄存器、RTC 備份寄存器和備份 SRAM)將受到保護,以防止意外的寫訪問。要使能對備份域的訪問,請按以下步驟進行操作:
訪問 RTC 和 RTC 備份寄存器
訪問備份 SRAM
想要訪問備份域還是非常簡單的,下面以訪問備份SRAM為例,從代碼角度說明一下(具體見注釋即可):
/*** @brief (使用標準外設庫)備份SRAM初始化* @param[in] void* @retval NULL*/ static void vBkpSramInit(void) {/* 電源接口時鐘使能 (Power interface clock enable) */RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);/* DBP 位置 1,使能對備份域的訪問 */PWR_BackupAccessCmd(ENABLE);/* 通過將 RCC AHB1 外設時鐘使能寄存器 (RCC_AHB1ENR) 中的 BKPSRAMEN 位置 1, 使能備份 SRAM 時鐘 */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);/* 應用程序必須等待備份調壓器就緒標志 (BRR) 置 1,指示在待機模式和 VBAT 模式下會保持寫入 RAM 中的數據。 */while(PWR_GetFlagStatus(PWR_FLAG_BRR) != SET); }/** (使用HAL庫)備份SRAM初始化* * @param[in] NULL* @retval Null **/ void BKP_SRAM_Init(void) {/* 電源接口時鐘使能 (Power interface clock enable) */__HAL_RCC_PWR_CLK_ENABLE();/* DBP 位置 1,使能對備份域的訪問 */HAL_PWR_EnableBkUpAccess();/* 通過將 RCC AHB1 外設時鐘使能寄存器 (RCC_AHB1ENR) 中的 BKPSRAMEN 位置 1, 使能備份 SRAM 時鐘 */__HAL_RCC_BKPSRAM_CLK_ENABLE();/* 應用程序必須等待備份調壓器就緒標志 (BRR) 置 1,指示在待機模式和 VBAT 模式下會保持寫入 RAM 中的數據。 */HAL_PWREx_EnableBkUpReg(); }經過以上初始化之后,就可以使用備份域中的各部分功能了(RTC和備份SRAM的初始化有些區別)。
備份域的使用
初始化后對于備份域中各功能(RTC、RTC備份寄存器、備份SRAM)的使用就比較靈活了。
- RTC: 使用相對來說比較復雜,后面獨立介紹
- RTC備份寄存器: 讀寫非常簡單,標準外設庫和HAL庫都提供了函數直接進行讀寫。
- 備份SRAM: 這部分的使用就更加靈活了,可以直接當內存去訪問。推薦一種使用分散加載文件進行訪問的方式。具體為定義自己的結構體,使用結構體定義變量BKP_SRAM myContent __attribute__((section("BKP_SRAM_SECTION")));,最后使用分散加載文件,將以上定義的變量直接映射到備份SRAM即可。
備份SRAM問題
在實際產品中使用時,發現備份SRAM中的數據丟失!檢查在硬件上并沒有出現任何問題,于是從軟件一步步分析如下:
解決
??在IAP跳轉到APP前,將備份域的各時鐘失能,這樣APP中配置的備份SRAM才會有效。
后續
后續可以測試一下其他外設是否有此問題。最好測試一下同樣是掛在同一總線下的外設(GPIO、DMA、備份域時鐘全部是在AHB總線下的)。
總結
以上是生活随笔為你收集整理的STM32 之七 备份域(备份寄存器、备份SRAM)详解及数据丢失问题处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构与设计 之一 C 嵌入式设计模式(D
- 下一篇: STM32 之八 在线升级(IAP)超详