打印
[STM32F4]

keil 407每次都会跳转到 HardFault_Handler

[复制链接]
150|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
地瓜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 内部访问非法地址。

使用特权

评论回复
5
童雨竹| | 2025-3-24 08:21 | 只看该作者
试试换成 HAL_SPI_Transmit(&hspi1, buff_cfg, 2, SPI_TIMEOUT);,看看会不会还是 HardFault,可能是 &buff_cfg[1] 传参有问题。

使用特权

评论回复
6
万图| | 2025-3-24 08:22 | 只看该作者
buff_cfg 是全局变量还是局部变量?如果是局部变量,看看栈有没有溢出,特别是 RTOS 任务里可能栈不够用。

使用特权

评论回复
7
Wordsworth| | 2025-3-24 08:23 | 只看该作者
你有没有开 DMA?如果 HAL_SPI_Transmit 里用到 DMA,而 buff_cfg 不是 __attribute__((aligned(4))),可能会触发 HardFault。

使用特权

评论回复
8
Bblythe| | 2025-3-24 08:25 | 只看该作者
试试看把 buff_cfg 放到 .bss 或 .data 段,比如 static uint8_t buff_cfg[10] = { 0 };,看看问题是否解决。

使用特权

评论回复
9
Pulitzer| | 2025-3-24 08:26 | 只看该作者
进入 HardFault_Handler 时,看看 SCB->HFSR 和 SCB->CFSR 寄存器的值,能判断出具体的错误类型,比如非法访问、总线错误等。

使用特权

评论回复
10
Uriah| | 2025-3-24 08:27 | 只看该作者
HAL_SPI_Transmit 可能会调用 HAL_GetTick(),而如果 SysTick 没有正确初始化,也可能导致 HardFault,试试检查 HAL_Init() 是否正确执行。

使用特权

评论回复
11
Clyde011| | 2025-3-24 08:29 | 只看该作者
你试过用 Disassembly 视图单步调试 HAL_SPI_Transmit 吗?看看在哪一行触发了 HardFault,这样更容易找出具体问题。

使用特权

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

本版积分规则

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

1407

主题

13561

帖子

27

粉丝