簡體   English   中英

寫入 STM32 內部 flash 失敗

[英]Write to STM32 internal flash fails

在我的 stm32 單片機上沒有 eeprom。 所以,我正在使用內部 flash 來保存一個字節的用戶數據,以便在電源周期之間保留它。我正在按照以下方式進行操作,

  1. 在 linker 腳本中的 memory 中添加數據部分
MEMORY { 
   RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K 
   FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K 
   DATA (xrw) : ORIGIN = 0x800F800, LENGTH = 2K //Allocated one full flash page 
}
  1. 創建用戶數據部分
    .user_data : 
     { . = ALIGN(4); 
       *(.user_data)
       . = ALIGN(4);
     } >DATA
  1. 創建一個變量存儲在 flash
    attribute((section(".user_data"))) const uint8_t userConfig[10]
  1. 使用以下函數寫入數據,
    HAL_FLASH_Unlock();
    
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
    
    FLASH_PageErase(FLASH_PAGE_31);
    
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, (uint32_t)&userConfig[index], someData);
    
    HAL_FLASH_Lock();

當我嘗試寫入 flash 時,它失敗並設置了 PGSERR 標志。

  1. 0x0800 3800 - 0x0800 3FFF是銀行 7 而不是銀行 11。

  2. &userConfig[index]通常是錯誤的,因為 memory 在此微控制器中以 64 位字進行編程,並且地址必須與 8 字節邊界對齊。

在對微控制器進行編程之前,請務必閱讀文檔 使用魔法庫並不能讓您免於了解您的硬件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM