你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 Flash 擦除HAL_FLASHEx_Erase()无法将字节恢复为 0xFF

[复制链接]
patch1582 提问时间:2026-7-29 14:48 / 未解决

我在 STM32L476RET6 上遇到无法擦除指定 Flash 页。调用HAL_FLASHEx_Erase()返回HAL_OK,看似擦除成功,但使用 STM32CubeProgrammer 读取目标地址,数据并没有被擦除成的 0xFF。 故障相关代码:

HAL_StatusTypeDef set_update_flag(void) { // Unlock the Flash to enable the flash control register access HAL_StatusTypeDef status = HAL_FLASH_Unlock(); if (status != HAL_OK) { // Unlock failed, handle accordingly return status; } // Define the page and bank for the erase operation FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PageError = 0; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.Banks = FLASH_BANK_1; EraseInitStruct.Page = 255; // Targeting the last page for the erase operation EraseInitStruct.NbPages = 1; // Erase the page status = HAL_FLASHEx_Erase(&EraseInitStruct, &PageError); if (status != HAL_OK) { // Erase failed, handle accordingly HAL_FLASH_Lock(); // Make sure to lock the flash again before returning return status; } // Set the update flag to 1 status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, UPDATE_FLAG_ADDRESS, 0x0000000100000001); if (status != HAL_OK) { // Program failed, handle accordingly HAL_FLASH_Lock(); // Make sure to lock the flash again before returning return status; } HAL_FLASH_Lock(); // Lock the Flash to disable the flash control register access return HAL_OK; } 擦除函数无报错返回HAL_OK,但PageError变量值为0xFFFFFFFF。后续调用HAL_FLASH_Program()写入数据直接返回错误。 该功能之前运行正常,现在失效。已经页编号、确认 Flash 解锁流程正常,函数出口也执行 Flash 上锁。

收藏 评论1 发布时间:2026-7-29 14:48

举报

1个回答
butterflyspring 回答时间:昨天 16:58


厂家有现成的例程,可以跑跑或参考一下

STM32Cube_FW_L4_V1.18.2\Projects\NUCLEO-L476RG\Examples\FLASH\FLASH_EraseProgram

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版