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



我正在尝试为STM32G474RE微控制器设计一个UART引导加载程序。我在Flash擦除部分代码时遇到问题。在为STM32G474RE微控制器设计引导程序之前,我尝试了STM32F767Zi Nucleo套件。这套装备运行良好。Nucleo试剂盒的代码如下:

if( is_first_block )
{
printf("Erasing the Flash memory...rn");
//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。电压范围=FLASH_VOLTAGE_RANGE_3;当我编译代码时,这个命令会出错。(我已经检查了stm32g4xx_hal_flash.h文件,但没有关于它的信息,而stm32f7xx_hal_frash.h文件有关于它的相关信息。(。我得到了以下两个错误:
    -宏FLASH_VOLTAGE_RANGE_3没有#定义
    -结构FLASH_EraseInitTypeDef没有名为VoltageRange的成员

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

没有擦除扇区(仅页面(的选项

你的意思是:;没有擦除页面的选项(仅扇区("?

或者你的意思是:;没有擦除完整银行的选项";?

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(。

最新更新