打印
[STM32G0]

STM32G0 中断中的变量 Memory Fault/HardFault

[复制链接]
489|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小库里|  楼主 | 2025-5-25 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用 STM32Cube IDE开发STM32G071在 Scanning Mode 上作 7 段 。
每 20 毫秒还在比较器中断内递减计数器值 。
1) 有时程序会因 Hard Fault 而挂起,
2)中断内发生 Memory Fault/HardFault。


使用特权

评论回复
沙发
stormwind123| | 2025-5-26 12:28 | 只看该作者
内存访问未对齐?

使用特权

评论回复
板凳
probedog| | 2025-5-26 12:29 | 只看该作者
可能是因为堆栈溢出吧!

使用特权

评论回复
地板
classroom| | 2025-5-26 12:30 | 只看该作者
非法地址访问,指针未初始化或野指针?

使用特权

评论回复
5
flycamelaaa| | 2025-5-26 18:20 | 只看该作者
总线错误或者是中断时序冲突吧。。

使用特权

评论回复
6
powerantone| | 2025-5-26 19:30 | 只看该作者
禁用中断保护。

使用特权

评论回复
7
公羊子丹| | 2025-5-27 07:40 | 只看该作者
会不会是中断里访问了未初始化的指针或非法内存?建议用 __attribute__((section(".noinit"))) 保持变量有效。

使用特权

评论回复
8
周半梅| | 2025-5-27 07:41 | 只看该作者
建议检查变量是不是在 ISR 中被频繁访问导致栈溢出?尤其是局部变量。

使用特权

评论回复
9
帛灿灿| | 2025-5-27 07:42 | 只看该作者
你中断里有用到数组或者指针操作吗?HardFault 很容易是越界访问造成的。

使用特权

评论回复
10
童雨竹| | 2025-5-27 07:42 | 只看该作者
试试看把中断中用的变量声明成 volatile 的,防止编译器优化出问题。

使用特权

评论回复
11
万图| | 2025-5-27 07:43 | 只看该作者
我之前遇到类似的问题,最后发现是主循环和中断同时修改一个变量没加保护,试试关中断或加 __disable_irq()。

使用特权

评论回复
12
Wordsworth| | 2025-5-27 07:44 | 只看该作者
STM32G0 RAM 比较小,如果你在中断里递归或用了太多临时变量,很容易爆栈。

使用特权

评论回复
13
Bblythe| | 2025-5-27 07:45 | 只看该作者
中断时间是不是太频繁了?20ms 本身不快,但嵌套中断或处理太重也会触发异常。

使用特权

评论回复
14
Pulitzer| | 2025-5-27 07:45 | 只看该作者
建议在 HardFault_Handler 里 dump 一下栈看看触发的位置,CubeIDE 支持。

使用特权

评论回复
15
Uriah| | 2025-5-27 07:46 | 只看该作者
可以试试 ST 提供的 HardFault 分析工具,看看是哪个地址访问非法。

使用特权

评论回复
16
Clyde011| | 2025-5-27 07:47 | 只看该作者
我有一次是 HAL 库中用了 HAL_Delay 在中断里,结果直接挂,建议中断别用阻塞函数。

使用特权

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

本版积分规则

17

主题

17

帖子

0

粉丝