我正在嘗試為 STM32G474RE 微控制器設計一個 UART 引導加載程式。我在 Flash 擦除部分代碼時遇到問題。在為 STM32G474RE 微控制器設計引導加載程式之前,我嘗試了 STM32F767Zi Nucleo 套件。它在該套件上運行良好。Nucleo套件的代碼如下:
if( is_first_block )
{
printf("Erasing the Flash memory...\r\n");
//Erase the Flash
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t SectorError;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.Sector = FLASH_SECTOR_5;
EraseInitStruct.NbSectors = 2; //erase 2 sectors(5,6)
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
ret = HAL_FLASHEx_Erase( &EraseInitStruct, &SectorError );
if( ret != HAL_OK )
{
break;
}
}
在這里,我正在擦除 2 個扇區。
現在,當我嘗試 STM32G474RE 時,我遇到了以下問題:
- 沒有擦除扇區的選項(僅限頁面)
- EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3; 當我編譯代碼時,此命令出錯。(我檢查了 stm32g4xx_hal_flash.h 檔案,但沒有關于它的資訊,而 stm32f7xx_hal_flash.h 檔案有關于它的資訊。)。我收到以下兩個錯誤:
- 宏FLASH_VOLTAGE_RANGE_3不是 #defined
- 結構FLASH_EraseInitTypeDef沒有命名成員VoltageRange
如果有人能從他們的經驗中幫助我并指導我解決這些問題,那就太好了。
uj5u.com熱心網友回復:
沒有擦除扇區的選項(僅限頁面)
您的意思是:“沒有擦除頁面(僅扇區)的選項”?
或者你的意思是:“沒有選擇擦除一個完整的銀行”?
HAL_FLASHEx_Erase擦除一個或多個扇區,而不是頁。一個扇區由多個頁面組成。
而扇區是由于硬體限制可以擦除的最小單位。
您不能擦除少于整個扇區,因為硬體不支持擦除部分扇區。
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
我剛剛查看了STM32 F 4xx和STM32 L 4xx的頭檔案:
STM32 F 4xxVoltageRange在結構體中有一個欄位命名FLASH_EraseInitTypeDef,STM32 L 4xx 沒有這樣的欄位。
當然,宏FLASH_VOLTAGE_RANGE_3也沒有為 STM32 L 4xx定義,因為缺少相應的欄位。
您正在使用 STM32 G 4xx。如果該 CPU 不獲取VoltageRange資訊,您必須EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3從代碼中洗掉完整的行 ( )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369167.html
