[英]Write to STM32 internal flash fails
在我的 stm32 單片機上沒有 eeprom。 所以,我正在使用內部 flash 來保存一個字節的用戶數據,以便在電源周期之間保留它。我正在按照以下方式進行操作,
MEMORY {
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K
DATA (xrw) : ORIGIN = 0x800F800, LENGTH = 2K //Allocated one full flash page
}
.user_data :
{ . = ALIGN(4);
*(.user_data)
. = ALIGN(4);
} >DATA
attribute((section(".user_data"))) const uint8_t userConfig[10]
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 標志。
0x0800 3800 - 0x0800 3FFF
是銀行 7 而不是銀行 11。
&userConfig[index]
通常是錯誤的,因為 memory 在此微控制器中以 64 位字進行編程,並且地址必須與 8 字節邊界對齊。
在對微控制器進行編程之前,請務必閱讀文檔。 使用魔法庫並不能讓您免於了解您的硬件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.