擦除 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 时,我遇到了以下问题:
- 没有擦除扇区的选项(仅页面)
- EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;当我编译代码时,此命令出错。 (我检查了 stm32g4xx_hal_flash.h 文件,但没有关于它的信息,而 stm32f7xx_hal_flash.h 文件有关于它的信息。)。我收到以下两个错误:
- 宏 FLASH_VOLTAGE_RANGE_3
不是#defined
- 结构 FLASH_EraseInitTypeDef
没有名为 VoltageRange
的成员
如果有人能根据他们的经验帮助我并指导我解决这些问题,那就太好了。
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
)。
我正在尝试为 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
的成员
如果有人能根据他们的经验帮助我并指导我解决这些问题,那就太好了。
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
)。