【求助】GD32F470 FPU 初始化触发HardFault_Handler

[复制链接]
 楼主| lwj19872002 发表于 2025-4-23 16:10 | 显示全部楼层 |阅读模式
GD32F470 FPU 初始化触发HardFault_Handler

如题,在使用GD32F470芯片是,当初始化走到“SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */”,芯片触发中断进入了HardFault_Handler。

不知大家有遇到这个情况吗?
两只袜子 发表于 2025-4-24 10:31 | 显示全部楼层
写寄存器时优先级未正确配置?
elephant00 发表于 2025-4-24 10:34 | 显示全部楼层
如果芯片的FPU未启用,或者存在其他与FPU相关的配置冲突,也可能导致 HardFault。
laocuo1142 发表于 2025-4-24 10:35 | 显示全部楼层
检查是否启用了芯片的FPU模块。
probedog 发表于 2025-4-24 10:38 | 显示全部楼层
用J-Link调试看看。
jcky001 发表于 2025-4-24 13:00 | 显示全部楼层
在ARM Cortex-M4内核中,FPU的访问需要正确配置浮点寄存器的访问权限。但如果在中断或异常上下文中执行此操作,可能会导致错误访问,触发 HardFault。
cr315 发表于 2025-4-24 13:03 | 显示全部楼层
可能是编译器优化问题。
dffzh 发表于 2025-4-24 13:20 | 显示全部楼层
可以按如下步骤和思路尝试解决:
1、FPU没有正确启用;
在IDE的编译器选项中,看看有木有启用FPU选项配置;
2、时钟配置
如果系统时钟没有正确配置,可能会导致FPU无法正常工作;
3、堆栈对齐
FPU操作好像是需要8字节对齐的;
可以在启动文件startup_gd32f4xx.s中修改:
__initial_sp    EQU     0x20020000 & ~0x7   ; 8 字节对齐
4、中断优先级配置;
将PendSV 和 SysTick 的中断优先级设置为最低:
NVIC_SetPriority(PendSV_IRQn, 0xFF);
NVIC_SetPriority(SysTick_IRQn, 0xFF);

以上希望对你有用!
flycamelaaa 发表于 2025-4-24 15:20 | 显示全部楼层
可能是优先级配置问题。
stormwind123 发表于 2025-4-24 16:20 | 显示全部楼层
FPU的初始化可能依赖于系统时钟,检查时钟配置是否正确。
powerantone 发表于 2025-4-24 19:00 | 显示全部楼层
看看芯片是否存在硬件故障或供电问题。
喂什么玩意 发表于 2025-5-31 11:42 | 显示全部楼层
确保设置 FPU 权限的代码在 主频已配置、堆栈指针合法、中断向量表有效的条件下执行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部