我正在尝试为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时,我遇到了以下问题:
- 没有擦除扇区的选项(仅页面(
- 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
(。