擦除 STM32G474RE 的闪存扇区不起作用

Erasing a flash sector for STM32G474RE is not working

我正在尝试为 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 时,我遇到了以下问题:

  1. 没有擦除扇区的选项(仅页面)
  2. EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;当我编译代码时,此命令出错。 (我检查了 stm32g4xx_hal_flash.h 文件,但没有关于它的信息,而 stm32f7xx_hal_flash.h 文件有关于它的信息。)。我收到以下两个错误:
    - 宏 FLASH_VOLTAGE_RANGE_3 不是#defined
    - 结构 FLASH_EraseInitTypeDef 没有名为 VoltageRange
  3. 的成员

如果有人能根据他们的经验帮助我并指导我解决这些问题,那就太好了。

There is no option to erase sectors (Only pages)

您的意思是:“没有擦除的选项(仅扇区)”?

或者您的意思是:“没有擦除完整 bank 的选项”?

HAL_FLASHEx_Erase 擦除一个或多个扇区,而不是页面。一个扇区由多个页面组成。

由于硬件限制,扇区是可以擦除的最小单位。

不能擦除整个扇区,因为硬件不支持擦除部分扇区。

EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;

刚刚看了STM32F4xx和STM32L4xx的头文件:

STM32F4xx在结构体FLASH_EraseInitTypeDef中有一个名为VoltageRange的字段,STM32L4xx确实没有这样的字段。

当然STM32L4xx也没有定义宏FLASH_VOLTAGE_RANGE_3,因为缺少相应的字段。

您正在使用 STM32G4xx。如果 CPU 没有获取 VoltageRange 信息,您必须简单地从代码中删除完整的行 (EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3)。