[STM32F0] STM32F030RC擦除某个 Flash 页时CPU 崩溃

[复制链接]
1336|17
 楼主| 田舍郎 发表于 2025-3-19 22:07 | 显示全部楼层 |阅读模式
用 STM32CubeIDE 开发一个STM32F030RC项目。
当使用“HAL_FLASHEx_Erase”功能擦除某个 Flash 页时(在 Flash 末尾没有代码),CPU 崩溃。
测试可能中断将其打断。所以在擦除之前用 __disable_irq 禁用了中断,并在擦除后用 __enable_irq 启用终端。
擦除完成启用中断后,CPU 仍旧崩溃。


公羊子丹 发表于 2025-3-20 08:20 | 显示全部楼层
我之前也遇到过类似的问题,最后发现是擦除时 Flash 访问冲突导致的。你有没有检查擦除时是否还有代码或数据被访问?
周半梅 发表于 2025-3-20 08:21 | 显示全部楼层
你试过在擦除 Flash 之前,把代码跑到 RAM 里执行吗?有时候 Flash 操作时 CPU 读取指令会出问题。
帛灿灿 发表于 2025-3-20 08:22 | 显示全部楼层
你是在哪个中断里调用的擦除操作?如果是在 SysTick 或者其他高优先级中断里执行,可能会导致崩溃。
童雨竹 发表于 2025-3-20 08:23 | 显示全部楼层
试试看在擦除 Flash 之前,先关闭 Prefetch 和 ART(如果有的话),然后再执行擦除。
万图 发表于 2025-3-20 08:24 | 显示全部楼层
擦除操作完成后,你有没有手动执行 __DSB(); __ISB(); 这些指令来确保 Flash 操作完成并同步?
Wordsworth 发表于 2025-3-20 08:25 | 显示全部楼层
你有没有试过在擦除前后加上 HAL_FLASH_Lock(); 和 HAL_FLASH_Unlock();,有时候这个顺序也会影响执行?
Bblythe 发表于 2025-3-20 08:26 | 显示全部楼层
可能是擦除某个 Flash 页时影响了 Vector Table?你可以试试把 Vector Table 重新映射到 SRAM 里看看是否还有问题。
Pulitzer 发表于 2025-3-20 08:27 | 显示全部楼层
如果只擦除这一页就崩溃,那有没有试过擦除其他页看看?有可能是 Flash 这块区域损坏了?
Uriah 发表于 2025-3-20 08:28 | 显示全部楼层
你试过不用 HAL 库,直接操作 FLASH 指令擦除吗?有时候 HAL 库的封装会隐藏一些细节,导致问题不好排查。
Clyde011 发表于 2025-3-20 08:29 | 显示全部楼层
你有没有打开 Debug,在崩溃后看下 PC 和 LR 寄存器的值,看看 CPU 到底是跑飞到哪里了?
cr315 发表于 2025-3-20 11:12 | 显示全部楼层
电源电压不稳定可能导致MCU在擦除Flash时崩溃。
jcky001 发表于 2025-3-20 12:28 | 显示全部楼层
软件中存在bug,如堆栈溢出、内存泄漏等,可能导致CPU在擦除Flash时崩溃。
elephant00 发表于 2025-3-20 12:28 | 显示全部楼层
外部电磁干扰、静电干扰等可能影响MCU的正常运行,导致擦除Flash时崩溃。
两只袜子 发表于 2025-3-20 13:00 | 显示全部楼层
如果复位电路异常,MCU可能在上电或擦除Flash时无法正常启动,导致崩溃。
jinyi7016 发表于 2025-3-20 17:42 | 显示全部楼层
在STM32Cube_FW_F0_V1.11.2\Projects\STM32F030R8-Nucleo\Examples\FLASH中,是有例程的,先跑一下例程,看对不对吧
jcky001 发表于 2025-3-20 18:20 | 显示全部楼层
Flash擦除操作不当引起的?
逆鳞风暴 发表于 2025-3-20 22:34 | 显示全部楼层
把代码跑到 RAM 里执行这个建议听起来不错,那具体怎么操作呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

2108

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部