OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 93|回复: 1

STM32H743 Bootloader App程序奇妙HardFault_Handler

[复制链接]

17

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2014-10-5
在线时间
39 小时
发表于 2025-1-30 01:56:58 | 显示全部楼层 |阅读模式
本帖最后由 stm32新人一枚 于 2025-1-30 02:16 编辑

最近用STM32H743做Bootloader。
Bootloader没啥问题,但是APP程序中,即便已经改好了中断向量地址,但仍然会莫名奇妙导致HardFault。

我这里整体情况是:
STM32CubeMX配置底层代码,使用FreeRTOS、LVGL、USB、FATFS,等等。


仔细对比填加Bootloader前后的R0㏑15 的寄存器组,除了R15,其他也没有任何区别。



最后挨个对比core peripherals中的各个寄存器,发现SysTick的VAL和CTRL寄存器是不同的:
没有Bootloader时,程序运行至main函数且没执行SystemClock_Config()函数时,SysTick->VAL和SysTick->CTRL的值都是0。

在有Bootloader时,运行APP程序进入main函数且没执行SystemClock_Config()函数时,SysTick->VAL和SysTick->CTRL的值都是0。


既然发现了不同的地方,那就做出相应的调整:


进入main函数后,先重定向向量表地址,然后清除SysTick->VAL和SysTick->CTRL的值,其他保持不变。


程序运行后,果然正常了。




我推测APP程序因为SysTick->VAL和SysTick->CTRL两个寄存器就导致HardFault的原因大概是因为FreeRTOS和LVGL都需要SysTick做心跳。
由于运行Bootloader程序时,SysTick已经有了数值,导致FreeRTOS或LVGL出了问题。
在运行FreeRTOS和LVGL之前,复位SysTick,就能正常运行了。



可能我已经不能算新人了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6756

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12974
金钱
12974
注册时间
2012-11-26
在线时间
3786 小时
发表于 2025-2-5 15:13:50 | 显示全部楼层
你app层是没配置systick吧  一般配systick的时候,这俩寄存器是会设置的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-22 02:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表