[STM32F4] keil 407每次都会跳转到 HardFault_Handler

[复制链接]
2274|16
 楼主| 地瓜patch 发表于 2025-3-22 16:44 | 显示全部楼层 |阅读模式
本帖最后由 地瓜patch 于 2025-3-22 16:47 编辑

keil,407每次运行下面的代码时,都会跳转到 “HardFault_Handler”。还没搞明白。
uint8_t buff_cfg[10] =   { 0 };     buff_cfg[0] = 1;   
buff_cfg[1] = 2;   
buff_cfg[2] = 3;   
buff_cfg[3] = 4;     
HAL_SPI_Transmit(&hspi1, &buff_cfg[1], 2, SPI_TIMEOUT);

公羊子丹 发表于 2025-3-24 08:17 | 显示全部楼层
你检查过 hspi1 是否已经正确初始化了吗?如果 hspi1 是空指针,调用 HAL_SPI_Transmit 可能会导致 HardFault。
周半梅 发表于 2025-3-24 08:19 | 显示全部楼层
试着在 HAL_SPI_Transmit 之前加一行 if (hspi1.Instance == NULL) while(1); 看看是不是 SPI 没初始化好。
帛灿灿 发表于 2025-3-24 08:20 | 显示全部楼层
你的 SPI_TIMEOUT 设的是多少?如果超时参数不对,可能会导致 HAL_SPI_Transmit 内部访问非法地址。
童雨竹 发表于 2025-3-24 08:21 | 显示全部楼层
试试换成 HAL_SPI_Transmit(&hspi1, buff_cfg, 2, SPI_TIMEOUT);,看看会不会还是 HardFault,可能是 &buff_cfg[1] 传参有问题。
万图 发表于 2025-3-24 08:22 | 显示全部楼层
buff_cfg 是全局变量还是局部变量?如果是局部变量,看看栈有没有溢出,特别是 RTOS 任务里可能栈不够用。
Wordsworth 发表于 2025-3-24 08:23 | 显示全部楼层
你有没有开 DMA?如果 HAL_SPI_Transmit 里用到 DMA,而 buff_cfg 不是 __attribute__((aligned(4))),可能会触发 HardFault。
Bblythe 发表于 2025-3-24 08:25 | 显示全部楼层
试试看把 buff_cfg 放到 .bss 或 .data 段,比如 static uint8_t buff_cfg[10] = { 0 };,看看问题是否解决。
Pulitzer 发表于 2025-3-24 08:26 | 显示全部楼层
进入 HardFault_Handler 时,看看 SCB->HFSR 和 SCB->CFSR 寄存器的值,能判断出具体的错误类型,比如非法访问、总线错误等。
Uriah 发表于 2025-3-24 08:27 | 显示全部楼层
HAL_SPI_Transmit 可能会调用 HAL_GetTick(),而如果 SysTick 没有正确初始化,也可能导致 HardFault,试试检查 HAL_Init() 是否正确执行。
Clyde011 发表于 2025-3-24 08:29 | 显示全部楼层
你试过用 Disassembly 视图单步调试 HAL_SPI_Transmit 吗?看看在哪一行触发了 HardFault,这样更容易找出具体问题。
laocuo1142 发表于 2025-3-24 15:36 | 显示全部楼层
检查栈大小,如果栈空间不足,可能会导致堆栈溢出,进而触发HardFault_Handler。
flycamelaaa 发表于 2025-3-24 15:37 | 显示全部楼层
用Keil的调试看看。
powerantone 发表于 2025-3-24 19:00 | 显示全部楼层
检查外设配置,特别是时钟配置和中断优先级设置是否有误。
probedog 发表于 2025-3-24 21:00 | 显示全部楼层
更新固件库到最新版本!
classroom 发表于 2025-3-24 21:00 | 显示全部楼层
可能是硬件连接问题!
stormwind123 发表于 2025-3-24 22:00 | 显示全部楼层
中断服务程序是否正确?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1932

主题

15224

帖子

31

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