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

STM32G070 Flash擦除失败:报Programming Size/Alignment Error求助

STM32G070 Flash擦除报错PGA_ERR+SIZ_ERR(错误码96)分析与解决

错误码含义拆解

先明确两个错误的硬件定义(来自STM32G070参考手册):

  • SIZ_ERR(位6):Flash操作的长度/地址不符合对齐要求,或超出有效范围
  • PGA_ERR(位5):操作目标地址不在合法Flash区域,或地址未按要求对齐

核心排查方向

1. 页号超出芯片Flash容量范围

STM32G070不同封装的Flash容量差异很大:

  • G070CBT6/C8T6:128KB(共64页,页号0~63)
  • G070FBT6/F8T6:64KB(共32页,页号0~31)
  • G070RBT6:256KB(共128页,页号0~127)

你指定的页号是62:

  • 如果用的是64KB版本的芯片,页号最大只能到31,62完全超出Flash范围,直接触发PGA_ERR+SIZ_ERR
  • 先查你手上芯片的型号,确认Flash总页数,把Page参数改成合法范围内的值(比如页30)测试

2. EraseInitStruct参数配置错误

  • 确认Page参数是页号而非字节地址:如果误把Flash字节地址填到Page字段,会导致地址完全超出合法范围,触发两个错误
  • 检查NbPages:如果设置的页数加上起始页号超出总页数,也会触发范围错误

3. Flash时钟配置异常

STM32G0的Flash控制器对HCLK时钟频率有要求(擦除操作最高支持64MHz):

  • 如果HCLK超过手册规定的最大值,Flash控制器无法稳定工作,会抛出异常错误码
  • 检查RCC配置,确保HCLK在芯片手册允许的Flash操作频率范围内

4. 写保护误配置

虽然你调用了HAL_FLASH_Unlock(),但如果该页被配置了永久写保护(WRP),也可能间接触发类似错误:

  • 读取FLASH_WRPR寄存器,确认页62未被设置写保护;如果有,需要先解除写保护再操作

HAL层相关性判断

HAL_FLASHEx_Erase的实现完全遵循STM32G0的硬件规范,极少出现本身的bug。错误几乎都是由参数配置、芯片型号不匹配或硬件时钟问题导致的:

  • 可以查看HAL源码:HAL_FLASHEx_Erase仅做基础的参数传递和错误状态返回,不会主动校验页号是否超出芯片容量(部分HAL版本可能省略此校验),所以非法参数会直接触发硬件错误

快速验证步骤

  1. 尝试擦除页0(所有型号都合法),如果成功,说明代码逻辑正常,仅页号参数错误
  2. 擦除页0仍报错的话,检查HAL_FLASH_Unlock()是否正确执行(G0系列需要解锁CR和OPTCR两个寄存器,HAL函数已处理,但可以手动读取FLASH_CR的LOCK位确认)

内容的提问来源于stack exchange,提问作者Leonardo Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:56:25