打印
[STM32F4]

从boot跳转到应用程序时出现硬故障

[复制链接]
276|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我的牙白|  楼主 | 2025-4-24 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在我的 stm32f407板子上,有一个boot分区,如果不需要更新程序,它可以很顺利启动应用程序。在我将 cubeMX 更新到新版本之后,重新生成 IAP 的代码,当程序从boot跳转到应用程序时,遇到了硬故障。
boot程序位于0x8000000
应用程序位于0x8008000 ,在 STM32f4xx_FLASH.ld 中定义
/* Highest address of the user mode stack */_estack = ORIGIN(RAM) + LENGTH(RAM);        /* end of "RAM" Ram type memory */ _Min_Heap_Size = 0x200 ;        /* required amount of heap  */_Min_Stack_Size = 0x400 ;        /* required amount of stack */ /* Memories definition */MEMORY{  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 320K  FLASH (rx)      : ORIGIN = 0x8008000, LENGTH = 992K}

使用特权

评论回复
沙发
onlycook| | 2025-4-24 12:07 | 只看该作者
可能是应用程序的向量表偏移未正确设置。

使用特权

评论回复
板凳
七毛钱| | 2025-4-24 13:00 | 只看该作者
链接脚本配置可能错误。

使用特权

评论回复
地板
内政奇才| | 2025-4-24 14:00 | 只看该作者
CubeMX 生成的启动文件或初始化代码可能不兼容。

使用特权

评论回复
5
麻花油条| | 2025-4-24 18:00 | 只看该作者
如果应用程序的某些区域被标记为只读或受保护,可能导致写入操作失败或硬故障。

使用特权

评论回复
6
豌豆爹| | 2025-4-24 19:00 | 只看该作者
检查链接脚本中的堆栈和堆大小配置。

使用特权

评论回复
7
海滨消消| | 2025-4-24 20:00 | 只看该作者
应用程序的堆栈或堆大小配置过小,可能导致任务执行时发生硬故障。

使用特权

评论回复
8
海滨消消| | 2025-4-24 20:00 | 只看该作者
Bootloader 和应用程序的时钟配置冲突。

使用特权

评论回复
9
公羊子丹| | 2025-4-25 07:37 | 只看该作者
你有在boot里手动设置MSP和跳转地址吗?升级CubeMX后可能默认启动方式变了,要手动设置SP和PC才行。

使用特权

评论回复
10
周半梅| | 2025-4-25 07:38 | 只看该作者
从boot跳转时,要先关闭中断、关闭SysTick,然后用函数指针跳转,否则可能残留状态引发HardFault。

使用特权

评论回复
11
帛灿灿| | 2025-4-25 07:38 | 只看该作者
看你用了0x8008000作为起始地址,有确认你的应用程序在编译时是用这个地址链接的吗?

使用特权

评论回复
12
童雨竹| | 2025-4-25 07:39 | 只看该作者
会不会是IAP生成的代码开了某些新的库选项,导致编译出来的startup代码和实际地址不一致?

使用特权

评论回复
13
万图| | 2025-4-25 07:40 | 只看该作者
有没有调试试过跳转后是在哪个指令发生了fault?用ST-Link连上后在HardFault_Handler里看一下stack值。

使用特权

评论回复
14
Wordsworth| | 2025-4-25 07:41 | 只看该作者
建议在跳转前打印一下 (uint32_t)0x8008000 和 (uint32_t)(0x8008000 + 4),确认栈顶和复位向量值是否合理。

使用特权

评论回复
15
Bblythe| | 2025-4-25 07:42 | 只看该作者
有没有确保SCB->VTOR被正确设置为0x8008000?F4系列必须设置中断向量表偏移,不然跳转后异常全错。

使用特权

评论回复
16
Pulitzer| | 2025-4-25 07:43 | 只看该作者
升级CubeMX后有些启动文件可能变化了,比如是否多了一些C库初始化代码,建议核对startup和system_stm32f4xx.c。

使用特权

评论回复
17
Uriah| | 2025-4-25 07:44 | 只看该作者
如果你用的FreeRTOS等RTOS,也要特别小心初始化代码可能在boot和app里重复导致异常。

使用特权

评论回复
18
Clyde011| | 2025-4-25 07:45 | 只看该作者
我之前也遇到过类似的情况,后来发现在boot里多开了一次缓存,结果app初始化冲突,关掉ICache/DCACHE就好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

14

帖子

0

粉丝