You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32G474RE Flash擦除失效及编译报错问题咨询

STM32G474RE Flash擦除代码移植解决方案

问题根因

STM32F7与G4系列的Flash硬件架构、HAL库定义存在原生差异,你遇到的报错均为平台不兼容导致。

具体修改步骤

1. 适配G4的页擦除逻辑

STM32G4系列Flash无扇区设计,仅支持页擦除:STM32G474RE单页大小为2KB,共256页分为2个Bank,Bank1对应页0127,Bank2对应页128255。擦除类型需要改为FLASH_TYPEERASE_PAGES,替换原有的扇区相关参数。

2. 移除无效的VoltageRange配置

G4的HAL库中FLASH_EraseInitTypeDef结构体没有VoltageRange成员,也没有FLASH_VOLTAGE_RANGE_3相关宏定义:G4的Flash控制器会自动根据VDD电压适配擦写时序,不需要手动配置电压范围,直接删除该赋值语句即可。

适配后的可运行代码示例

if( is_first_block )
{
  printf("Erasing the Flash memory...\r\n");
  //Erase the Flash
  FLASH_EraseInitTypeDef EraseInitStruct;
  uint32_t PageError; // 存储擦除失败的页号,替换原SectorError

  EraseInitStruct.TypeErase     = FLASH_TYPEERASE_PAGES;
  EraseInitStruct.Banks         = FLASH_BANK_1; // 按擦除区域所属Bank设置,跨Bank需要分两次擦除
  EraseInitStruct.Page          = 16; // 示例为第16页,对应起始地址0x08008000,可按实际APP地址计算修改
  EraseInitStruct.NbPages       = 2; // 擦除连续2页,总大小4KB,可按需调整

  ret = HAL_FLASHEx_Erase( &EraseInitStruct, &PageError );
  if( ret != HAL_OK )
  {
    break;
  }
}

注意事项

  • 擦除操作前后的Flash解锁、加锁逻辑和F7一致,需先调用HAL_FLASH_Unlock()解锁,操作完成后调用HAL_FLASH_Lock()加锁。
  • 页号计算方式:页号 = (目标Flash起始地址 - FLASH_BASE) / FLASH_PAGE_SIZE,其中FLASH_BASE为0x08000000,FLASH_PAGE_SIZE为2048。
  • 单次擦除操作不能跨Bank,若需要擦除跨Bank的区域,需要分两次配置擦除结构体分别操作。

内容的提问来源于stack exchange,提问作者Nazar Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:54:02