STM32
直播中

刘杰

8年用户 1390经验值
私信 关注
[问答]

调整PWM占空比值时硬件错误HardFault_Handler的原因?

现象如下,调整上述代码中的设置基准(PWM信号占空比)超过一定值(CathodeWorkPar.OutRefValue数据值超过80),单片机仿真进入硬件中断,后面进行了以下测试;
1、程序分为BootLoad和APP两个部分,如果单独只烧录APP程序(更改起始地址),程序可以正常运行,给入任何占空比程序工作正常;
2、更改PWM输出通道,程序运行正常;
3、减小单片机启动文件中的堆或者栈的分配空间,程序也能恢复正常工作;这点我不太能理解,起初我是增加了栈的空间,后来测试发现不行,然后减小后发现工作正常,后保持栈空间不变减小堆空间发现也能工作正常,这是不是表示我程序的RAM溢出了啊,实际看编译结果两个程序应该只用了15k左右,选的单片机程序时20k的;
现在问题已经通过优化程序解决,就是这个问题点一直想不明白,有了解的大能麻烦指导下

回帖(1)

李麒铭

2024-3-25 15:34:27
一般进入harfault中断,可以通过查询进入中断前的函数进行查找。这种情况大多是数组溢出导致。堆栈的调整,可能会导致你数组地址的变化。正好PWM用的数组溢出后进入MCU用到的空间,把数据内容给覆盖导致。我也多次操作复现这种情况,甚至超出数组范围也不一定每次能复现。建议看一下MAP文件中,你用到数组的地址,和堆栈调整后的地址是不是不一样。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分