我目前正在编写一个程序,它将删除存储在 24 个闪存页面中的引导加载程序(引导加载程序从 0x08000000 开始,程序本身从 0x800C000 开始)。
第 1-11 和 13-23 页可以轻松擦除。现在的问题是,第0页和第12页无法无误地擦除。
代码如下(与第 12 页相同):
闪存擦除(0,1);
从 flash_erase() 到 -->
HAL_FLASH_Unlock();
HAL_FLASHEx_Erase(&erase_param, &err) //erase_param包含正确的page和bank
从 HAL_FLASHEx_Erase(&erase_param, &err) 到 -->
FLASH_PageErase(page_index, pEraseInit->Banks);
/* 等待最后一个操作完成 */
status = FLASH_WaitForLastOpera
tion((uint32_t)FLASH_TIMEOUT_VALUE); //
这就是程序卡住的地方。页擦除仍然有效,我可以在设备内存中看到它。但是有这个错误我无法进一步追踪。
这是调试调用堆栈:
线程 #1 [main] 1 [core: 0] (Suspended : Signal : SIGTRAP:Trace/breakpoint trap)
0xfffffffe
() 在 0xfffffff1
0xfffffffe
() 在 0xfffffff9
HAL_FLASHEx_Erase() 在 STM32l4xx_hal_flash_ex.c:197 0x800fc4a
flash.c:201 0x8015cb8 处的 flash_erase()
sulpom_app.c:227 0x8015738 处的 app_process()
main() 在 main.c:121 0x800ce84
在调试时,我注意到如果我进入函数
FLASH_PageErase(page_index, pEraseInit->Banks)
程序不会卡住,闪存页面会被正确擦除。
有人可以帮我找到这个错误的原因并帮助找到解决方案吗?谢谢你们。
此致
编辑:STM32L452
0