完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有自己的引导加载程序应用程序,类似于 ST 提供的 IAP 示例,它运行并确定要运行 2 个主要应用程序中的哪一个,然后启动该应用程序。引导加载程序工作正常,主应用程序工作正常,但是当我将它们组合在一起时,主应用程序总是以硬故障告终。如果我从 STM32CubeMX IDE 启动主应用程序,它启动正常,但如果我重新启动整个处理器,引导加载程序运行然后启动主应用程序,但它总是在同一点出现硬故障。如果我让主应用程序从闪存开始运行,它工作正常并且没有硬故障。
我已经尝试取消初始化引导加载程序中使用的所有外围设备,这似乎没有什么区别。唯一仍在运行的是 Systick 计时器。 是否有任何寄存器可以暗示为什么会发生硬故障? 如何确保主应用程序运行时一切都处于干净的状态? 我应该提一下,主应用程序是一个 FreeRTOS 项目,并且在初始化默认任务时发生硬故障。 |
|
相关推荐
1个回答
|
|
> 唯一仍在运行的是 SysTick 定时器。
为什么?禁用它。 > 我试过取消初始化所有外围设备 不要(永远)信任 HAL 函数,验证寄存器是否处于重置状态。使用 RCC *RSTR 寄存器,参见参考手册。 验证所有中断实际上在 NVIC->ICER* 寄存器中被禁用(参见 PM0253 编程手册中的描述) 验证 SCB->VTOR 始终指向应用程序的向量表。愚蠢的 SystemInit() 代码往往会在那里写入错误的值,尽管它可以使用正确的值 (g_pfnvectors)。不要相信 SystemInit()。 > 是否有任何寄存器可以暗示为什么会发生硬故障? 如果它总是在同一点发生硬故障,为什么不在那里设置一个断点,并检查那里发生了什么。 STM32CubeIDE有一个故障分析面板,我不知道它是否好用,但你可以试试。 异常堆栈帧记录在编程手册中。 > 如何确保主应用程序运行时一切都处于干净的状态? 不要相信生成的代码,不要相信库,不要相信示例代码,即使它们来自 MCU 供应商。验证参考手册和编程手册中的所有内容。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2634 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3609 浏览 6 评论
5987 浏览 21 评论
939浏览 4评论
1315浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
582浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1302浏览 3评论
1357浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:14 , Processed in 0.677037 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号