【问题标题】:Erasing a flash sector for STM32G474RE is not working擦除 STM32G474RE 的闪存扇区不起作用
【发布时间】:2022-01-03 02:48:30
【问题描述】:

我正在尝试为 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 的成员

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

【问题讨论】:

  • 参见示例FLASH_EraseProgram,它是库附带的。 STM32G4使用了与STM32F7不同的flash控制器,代码不能随便复制。
  • Flex,能否附上示例链接?
  • 您可以找到它here,但它也包含在您的 Cube 安装的 Repository 文件夹下。要查找本地存储库位置,请参阅 Stm32CubeMX 起始页的 Help->Updater Settings。
  • 我修改了您的问题:我删除了屏幕截图并使用文本描述了错误消息。在本网站上,不应使用文本的屏幕截图。

标签: assembly stm32 flash-memory stm32cubeide


【解决方案1】:

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

您的意思是:“没有删除页面的选项(仅部门)”?

或者您的意思是:“无法删除完整的银行”?

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 具有仅擦除页面和存储区的选项,而不是单个扇区。现在我将计算一个扇区中的页数并将其擦除。这是正确的方法吗?
猜你喜欢
  • 2021-02-12
  • 2017-08-05
  • 2021-07-06
  • 2018-11-03
  • 2015-01-29
  • 2021-09-28
  • 1970-01-01
  • 2019-11-19
  • 2012-09-20
相关资源
最近更新 更多