我在
STM32F722 上遇到随机 HardFaults。它们出现在代码的不同位置,有时甚至在堆栈初始化期间。
Stack 的分析没有显示任何溢出的风险:大多数时候,问题发生在执行 main() 循环时,并且堆栈的宽度永远不会超过 2 层。
查看故障状态寄存器显示:
_ HFSR 的 FORCED 位设置为 1
_ CFSR = 0x1000000 = UFSR 的未对齐位设置为 1:未对齐的内存访问。
位 UNALIGNED_TRAP 设置为 0
环顾 PC 和 LR,我只看到“无害”指令(通常是 ldr、str 或 ldr.b 和 str.b),堆栈中注册的代码是我的 main 无限循环的一部分,大部分时间执行没有任何麻烦。所以我不明白它有时会如何触发内存对齐错误......!
没有找到可能在我的板上触发此故障的原因。
我没有使用外部 SDRAM...
我还看到了以下主题,这似乎与我的问题完全相同
但是我的 HCLK 是 16 MHz,所以,根据 STLM32F7xx 的参考手册,我可以用于闪存访问的唯一延迟是 0 WS,这已经是这种情况了……
我将 HAL 用于启动代码和基本 (while(1)) 故障处理程序(因此我不明白为什么我的 UsageFault 升级为 HardFault,因为 UsageFault 处理程序在我的代码中存在)。
我将 gcc 和 gdb 与 Atollic TrueStudio 一起用作 IDE。
你能帮我解决这个问题吗?