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

STM32L476RG HAL_FLASH_Program写入Flash失败:错误码0xA8求助

STM32L476RG HAL_FLASH_Program写入失败问题解答

1. 错误码0xA8对应的错误类型

十六进制0xA8是STM32L4 Flash多个错误标志的组合:

  • FLASH_ERROR_RDERR(读保护错误,0x80):访问了受读保护的区域
  • FLASH_ERROR_WRPERR(写保护错误,0x10):尝试写入受写保护的区域
  • FLASH_ERROR_PGSERR(编程序列错误,0x08):编程操作的流程不符合要求(比如地址无效、未正确擦除目标区域等)
    核心触发原因是你写入的地址属于只读区域,进而引发了一系列保护类错误。

2. 需要修改的内容

(1)修正写入地址

你调用HAL_FLASH_Program时使用的0x1FFF7000属于系统Bootloader区域,该区域是出厂只读的,不允许用户写入。需要替换成你原本定义的主Flash区域地址0x080FFF10。

(2)修正擦除结构体的Page参数

EraseInitStruct.Page需要传入Flash页号,不是物理地址。STM32L4主Flash每页大小为2KB(FLASH_PAGE_SIZE = 0x800),页号计算公式为:

EraseInitStruct.Page = (Address - FLASH_BASE) / FLASH_PAGE_SIZE;

其中FLASH_BASE为0x08000000,针对0x080FFF10,计算出的页号为255。

(3)完善错误处理逻辑

在擦除或编程失败时,建议输出具体错误码,方便后续调试定位,比如:

if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
{
    uint32_t err = HAL_FLASH_GetError();
    printf("Erase error: 0x%X\r\n", err);
}

修改后的完整代码示例

static FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PAGEError;
uint32_t Address = 0x080FFF10;
uint64_t data = 5;

/* Unlock the Flash to enable the flash control register access */
HAL_FLASH_Unlock();

/* Erase the user Flash area*/
/* Fill EraseInit structure*/
EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
// 替换为计算后的页号
EraseInitStruct.Page = (Address - FLASH_BASE) / FLASH_PAGE_SIZE;
EraseInitStruct.NbPages = 1;

if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
{
    uint32_t err = HAL_FLASH_GetError();
    printf("Erase error: 0x%X\r\n", err);
}

/*Write into flash - 使用正确的主Flash地址*/
HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, data);
if (status == HAL_OK)
{
    printf("it works\r\n");
}
else
{
    uint32_t err = HAL_FLASH_GetError();
    printf("Program error: 0x%X\r\n", err);
}

HAL_FLASH_Lock();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:10:48