一个因VCAP脚导致的hardFault异常的话题

某日,有位STM32用户咨询如下问题: 

“在使用stm32f411CE芯片,编译环境是keil mdk 5.15.仿真器使用Jlink。利用st官网标准库文件建立工程。主函数中只有while(1){i++;if(i>100) i=0;}在仿真时出现keil中的复位按钮没有复位的作用,使用停止按钮发现程序进入HardFault_Handler(void)中的死循环,请问时什么原因造成的?” 

据该用户透露,之前他用STM32F407做过项目,对STM32开发应该说比较熟悉了。不过上面的问题让他也折腾好几天没有进展,自信心颇受打击。 

因为用户项目工程里几乎没有自己的代码,就是建立了个基本工程框架而已。怀疑其建立项目过程中出了问题,建议使用标准库的模板工程测试。结果发现问题依旧。

后来客户改用STM32cubeMx做基本的工程配置,自主调整系统工作时钟。意外发现当系统时钟调在36M或更低时 hardfault异常消失,当系统时钟调高时问题重现。 

用户的工程代码依旧简单得不能再简单。现在问题似乎跟系统时钟高低有关,但用户目前配置的时钟都是正常范围,应该正常工作才对。 

如果不是他用STM32cubeMX做配置,可能还会怀疑它的启动文件张冠李戴【一般出现在芯片简移植时】、时钟配置错误、或者是跟指令预取时间参数配置相关的代码配置错误。现在用户是用STM32CUBEMX配置,一般来讲这些问题都不会存在。因为CUBE工具都帮你处理好了。

 

这样看来问题很可能出在硬件线路方面。建议客户对其硬件检查,尤其电源部分和VCAP脚。从客户反馈的问题现象来看,跟VCAP脚关系可能比较大。

后来用户再次从硬件线路做确认检查,果真发现VCAP脚上电容有虚焊现象。重新处理后一切正常。

 

STM32家族中部分系列的芯片有12VCAP脚,它们往往需要接上合适的电容。ST MCU的手册上都给出相关品质参数。 

VCAP脚的电容对维持芯片内部供电的稳定非常关键。如果该脚的电容焊接得不好或参数相差太远、品质太差都会引起问题。看到这里,也就不难理解上面提到的系统工作时钟低时能正常工作,系统频率高时MCU就扛不住了,出现HARDFAULT异常。 

导致HARDFAULT异常的原因很多,还有比如时钟超频、数组越界、堆栈溢出、程序跑飞、非法指令等。有时原因并不太好找和跟踪,平时多些方向性的原因积累对你的项目开发相信不无裨益。

永不止步步 发表于10-20 09:04 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号