STM32
直播中

李梅

7年用户 1336经验值
私信 关注
[问答]

呼叫PWMC_GetPhaseCurrents时发生错误停留在HardFault_Handler 的原因?

想要请问 我的程式在执行
PWMC_GetPhaseCurrents(oCurrSensor[MC_NUM],  Iab);
会进入void HardFault_Handler(void)这个错误迴圈内就当住了!
当我用debug模式一步步查看时,发现在执行这个PWMC_GetPhaseCurrents函式时,
会先进入void MCP_WaitNextFrame
之后就会进入HardFault_Handler
我用call stack来观看,看到以下讯息

[ADC_ClearITPendingBit  + 0x4c]

请问是程式哪里出问题呢?
谢谢

回帖(1)

cherr番茄

2024-5-13 17:34:19
从您提供的信息来看,您的程序在执行 `PWMC_GetPhaseCurrents` 函数时遇到了 HardFault 异常。HardFault 是一种严重的异常,通常是由于程序运行时出现了某些错误,如内存访问违规、堆栈溢出等。在这种情况下,我们需要逐步排查问题。

1. 检查 `PWMC_GetPhaseCurrents` 函数的参数是否正确传递。确保 `oCurrSensor[MC_NUM]` 和 `Iab` 的值是有效的,并且没有超出预期的范围。

2. 检查 `MCP_WaitNextFrame` 函数的实现。由于 HardFault 在此函数之后发生,可能与此函数的实现有关。确保 `MCP_WaitNextFrame` 函数没有访问违规的内存或执行非法操作。

3. 检查中断服务例程 (ISR) 中的 `ADC_ClearITPendingBit` 函数。从您的描述来看,HardFault 发生在 `ADC_ClearITPendingBit + 0x4c`。这意味着可能在处理 ADC 中断时出现了问题。检查 `ADC_ClearITPendingBit` 函数的实现,确保它正确地清除了相应的中断位,并且没有执行任何可能导致 HardFault 的操作。

4. 检查程序中的其他中断服务例程。确保它们没有导致 HardFault 的问题。

5. 检查程序的堆栈使用情况。堆栈溢出也可能导致 HardFault。确保程序没有使用过多的堆栈空间,或者在函数调用中没有忘记释放堆栈。

6. 如果以上步骤都无法解决问题,尝试使用更详细的调试信息。例如,使用更详细的调试器输出,或者在程序中添加更多的断点,以便更准确地定位问题所在。

7. 如果问题仍然无法解决,您可能需要检查硬件和固件的兼容性。确保您的硬件平台支持您的程序,并且固件没有与硬件冲突的地方。

希望以上建议能帮助您解决问题。如果问题仍然存在,请提供更多的代码和上下文信息,以便进一步分析。
举报

更多回帖

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