STM32
直播中

李继明

7年用户 1104经验值
私信 关注
[问答]

STM32F107RBT6页擦除函数返回值成功但目标扇区数据并未成功擦除,为什么?

程序调用页擦除库函数擦除内部FLASH扇区数据时,函数返回值正常,但仿真查看内存发现目标扇区并未成功擦除。
擦除前解锁FLASH正常,FLASH寄存器相关状态标志正常。系统频率72MHz,按手册要求配置 FLASH_ACR 2个等待位,开启预取缓存区。MCU在执行擦除任务时供电稳定3.28V。

除此之外,使用 STM32 ST-LINK Utility 验证发现,全片擦除有效,但页擦除仅 0x0800E000-0x0800E7FF 这一个扇区正常擦除,其它扇区均擦除失败但未报错。
请各位大佬指点!



回帖(1)

李桂英

2024-5-23 17:13:36
根据您的描述,STM32F107RBT6的页擦除函数返回值成功,但目标扇区数据并未成功擦除。这种情况可能有以下几个原因:

1. **程序错误**:可能存在程序逻辑错误,导致擦除操作未能正确执行。请检查您的擦除函数实现,确保它正确地执行了擦除操作。

2. **地址问题**:确保您提供的扇区地址是正确的。STM32F107RBT6的FLASH地址空间有限,错误的地址可能导致擦除失败。

3. **硬件问题**:虽然您提到供电稳定,但仍然有可能存在硬件问题,如FLASH芯片损坏或连接问题。请检查硬件连接和FLASH芯片。

4. **擦除次数限制**:FLASH擦除次数有限,如果一个扇区已经被擦除多次,可能会导致擦除失败。请检查您的应用程序是否在同一个扇区进行了多次擦除操作。

5. **擦除时间问题**:STM32F107RBT6的擦除时间可能较长,如果程序在擦除操作完成之前就检查了擦除状态,可能会导致误判。请确保在擦除操作完成后再检查擦除状态。

6. **ST-LINK Utility问题**:您提到使用STM32 ST-LINK Utility验证时,全片擦除有效,但页擦除仅一个扇区正常擦除。这可能是ST-LINK Utility的问题,您可以尝试更新ST-LINK Utility或使用其他工具进行验证。

为了解决这个问题,您可以尝试以下步骤:

1. 仔细检查您的擦除函数实现,确保它正确地执行了擦除操作。
2. 确保提供的扇区地址是正确的。
3. 检查硬件连接和FLASH芯片,确保没有硬件问题。
4. 检查您的应用程序是否在同一个扇区进行了多次擦除操作。
5. 确保在擦除操作完成后再检查擦除状态。
6. 更新ST-LINK Utility或使用其他工具进行验证。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分