完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我目前正在编写一个程序,它将删除存储在 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_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); // 这就是程序卡住的地方。页擦除仍然有效,我可以在设备内存中看到它。但是有这个错误我无法进一步追踪。 这是调试调用堆栈: 线程 #1 [main] 1 [core: 0] (Suspended : Signal : SIGTRAP:Trace/breakpoint trap) 0xfffffffe 0xfffffffe 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 |
|
相关推荐
1个回答
|
|
得到的实际细节很少。
Piranha 关于 SCB->VTOR 的建议值得检查,ST 代码在 SystemInit() 中使用了一个非常糟糕的实现,依赖于#defines而不是链接器符号。确保它指向 0x0800C000,或者您的应用程序基础是什么。 检查引导加载程序不会让 Systick 和其他中断运行。 如果你有一个功能性的串行端口,你可以打印状态和注册内容,以及 SCB->VTOR 之类的东西 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2623 浏览 1 评论
3206 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1779 浏览 1 评论
3605 浏览 6 评论
5984 浏览 21 评论
934浏览 4评论
1311浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
579浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1299浏览 3评论
1353浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 20:18 , Processed in 1.064121 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号