標(biāo)題: 一個(gè)因VCAP腳導(dǎo)致的hardFault異常的話題 [打印本頁]

作者: taoran    時(shí)間: 2016-6-17 01:42
標(biāo)題: 一個(gè)因VCAP腳導(dǎo)致的hardFault異常的話題
某日,有位STM32用戶咨詢?nèi)缦聠栴}:

“在使用stm32f411CE芯片,編譯環(huán)境是keil mdk 5.15.仿真器使用Jlink。利用st官網(wǎng)標(biāo)準(zhǔn)庫文件建立工程。主函數(shù)中只有while(1){i++;if(i>100) i=0;}在仿真時(shí)出現(xiàn)keil中的復(fù)位按鈕沒有復(fù)位的作用,使用停止按鈕發(fā)現(xiàn)程序進(jìn)入HardFault_Handler(void)中的死循環(huán),請(qǐng)問時(shí)什么原因造成的?”


據(jù)該用戶透露,之前他用STM32F407做過項(xiàng)目,對(duì)STM32開發(fā)應(yīng)該說比較熟悉了。不過上面的問題讓他也折騰好幾天沒有進(jìn)展,自信心頗受打擊。

因?yàn)橛脩繇?xiàng)目工程里幾乎沒有自己的代碼,就是建立了個(gè)基本工程框架而已。懷疑其建立項(xiàng)目過程中出了問題,建議使用標(biāo)準(zhǔn)庫的模板工程測(cè)試。結(jié)果發(fā)現(xiàn)問題依舊。
后來客戶改用STM32cubeMx做基本的工程配置,自主調(diào)整系統(tǒng)工作時(shí)鐘。意外發(fā)現(xiàn)當(dāng)系統(tǒng)時(shí)鐘調(diào)在36M或更低時(shí) hardfault異常消失,當(dāng)系統(tǒng)時(shí)鐘調(diào)高時(shí)問題重現(xiàn)。

用戶的工程代碼依舊簡(jiǎn)單得不能再簡(jiǎn)單,F(xiàn)在問題似乎跟系統(tǒng)時(shí)鐘高低有關(guān),但用戶目前配置的時(shí)鐘都是正常范圍,應(yīng)該正常工作才對(duì)。

如果不是他用STM32cubeMX做配置,可能還會(huì)懷疑它的啟動(dòng)文件張冠李戴【一般出現(xiàn)在芯片簡(jiǎn)移植時(shí)】、時(shí)鐘配置錯(cuò)誤、或者是跟指令預(yù)取時(shí)間參數(shù)配置相關(guān)的代碼配置錯(cuò)誤,F(xiàn)在用戶是用STM32CUBEMX配置,一般來講這些問題都不會(huì)存在。因?yàn)?/font>CUBE工具都幫你處理好了。


這樣看來問題很可能出在硬件線路方面。建議客戶對(duì)其硬件檢查,尤其電源部分和VCAP腳。從客戶反饋的問題現(xiàn)象來看,跟VCAP腳關(guān)系可能比較大。
后來用戶再次從硬件線路做確認(rèn)檢查,果真發(fā)現(xiàn)VCAP腳上電容有虛焊現(xiàn)象。重新處理后一切正常。

STM32家族中部分系列的芯片有12個(gè)VCAP腳,它們往往需要接上合適的電容。ST MCU的手冊(cè)上都給出相關(guān)品質(zhì)參數(shù)。


VCAP腳的電容對(duì)維持芯片內(nèi)部供電的穩(wěn)定非常關(guān)鍵。如果該腳的電容焊接得不好或參數(shù)相差太遠(yuǎn)、品質(zhì)太差都會(huì)引起問題?吹竭@里,也就不難理解上面提到的系統(tǒng)工作時(shí)鐘低時(shí)能正常工作,系統(tǒng)頻率高時(shí)MCU就扛不住了,出現(xiàn)HARDFAULT異常。

導(dǎo)致HARDFAULT異常的原因很多,還有比如時(shí)鐘超頻、數(shù)組越界、堆棧溢出、程序跑飛、非法指令等。有時(shí)原因并不太好找和跟蹤,平時(shí)多些方向性的原因積累對(duì)你的項(xiàng)目開發(fā)相信不無裨益。

相關(guān)話題:
STM32系列MCU芯片開關(guān)中斷的話題





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1