[英]Problem with Writing to the Flash Memory of the STM32L4R5 microcontroller
我正在嘗試在 HAL_FLASH_Program() 的“FLASH_TYPEPROGRAM_FAST”模式下寫入 STM32L4R5 的 flash memory。
MCU 的 flash 配置為 Single Bank。
寫入 flash 僅在使用“FLASH_TYPEPROGRAM_DOUBLEWORD”時有效。 flash 在“FLASH_TYPEPROGRAM_FAST”模式下寫入時讀取為 0xFFFFFFFF。
這是我的測試項目:
// Page Erase Structure
static FLASH_EraseInitTypeDef EraseInitStruct;
// Page Erase Status
uint32_t eraseStatus;
// Data Buffer
uint64_t pDataBuf[32] =
{
0x1111111122222222, 0x3333333344444444,
0x5555555566666666, 0x7777777788888888,
0x12345678ABC12345, 0x23456789DEF01234,
0x34567890AAABBB12, 0x4567890FABCDDD34,
0x1111111122222222, 0x3333333344444444,
0x5555555566666666, 0x7777777788888888,
0x12345678ABC12345, 0x23456789DEF01234,
0x34567890AAABBB12, 0x4567890FABCDDD34,
0x1111111122222222, 0x3333333344444444,
0x5555555566666666, 0x7777777788888888,
0x12345678ABC12345, 0x23456789DEF01234,
0x34567890AAABBB12, 0x4567890FABCDDD34,
0x1111111122222222, 0x3333333344444444,
0x5555555566666666, 0x7777777788888888,
0x12345678ABC12345, 0x23456789DEF01234,
0x34567890AAABBB12, 0x4567890FABCDDD34
};
// Flash Page Start Address
uint32_t pageAddr = 0x081FE000;
// Fill Erase Init Structure
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Banks = FLASH_BANK_1;
EraseInitStruct.Page = 255;
EraseInitStruct.NbPages = 1;
// Unlocking the FLASH Control Register
HAL_FLASH_Unlock();
// Clear OPTVERR Bit Set on Virgin Samples
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
// Erasing the Flash Page
HAL_FLASHEx_Erase(&EraseInitStruct, &Error);
#if 0
// Wriring a Doubled Word to Flash. pDataBuf[0] is the 64-bit Word
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, pageAddr, pDataBuf[0]);
#else
// Wriring 32 Double Words. pDataBuf is the Starting Address of the 64-bit Array
HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST_AND_LAST, pageAddr, pDataBuf);
#endif
// Locking the FLASH Control Register
HAL_FLASH_Lock();
我做錯什么了嗎?
謝謝,
伊萬
文檔 RM0932,STM32L4+ 參考手冊,FLASH 部分。 它涵蓋了對 flash 的讀取和寫入,適用於單組和雙組配置以及該系列的不同 MCU 型號。 似乎,大多數差異是關於從 Flash 讀取(64 位用於雙排,128 位用於單排)。 至於寫作,第128頁:
Flash對數據寬度非常挑剔,每個STM32的flash似乎都有不同的數據寬度。 最近我偶然發現了一個,它只接受 16 位的寫入和讀取。 這個喜歡雙字。 沒有通用的 function 可以讀寫 flash 到任何 STM32,因此您的命令之一似乎不遵守此 MCU 的 Flash 數據寬度規則。 您可以根據參考手冊檢查是否出現任何錯誤標志,盡管如您所見,它並沒有說明任何關於嘗試寫入 32 位數據的內容。 我預計寫入會失敗,但我們無法從提供的屏幕截圖中得出關於錯誤標志的任何結論。 如果您足夠好奇,您可以查看您的每種模式/功能使用的數據寬度,看看會發生什么。 64 位寫入必須工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.