本文作者:Miler Shao 關(guān)于STM32晶振振蕩異常問題,貌似有點老生常談了。剛好最近又遇到類似案例,一起分享交流下。 一日,某工程師反映使用STM32F107RCT6的產(chǎn)品是已經(jīng)量產(chǎn)了的,一直沒問題。最近重新生產(chǎn)測試時發(fā)現(xiàn)產(chǎn)品不能正常工作?蛻粲玫氖25M外部有源晶振,示波器測試晶振腳是有波形的【波形具體特征沒說】。DEBUG調(diào)試檢測發(fā)現(xiàn)卡死在與HSE有關(guān)的時鐘初始化代碼里。 要么卡死在: do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter !=HSEStartUp_TimeOut));
或者卡死在: /* Enable PLL2 */ RCC->CR |= RCC_CR_PLL2ON; /* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY) == 0) { } 根據(jù)其描述,既然是量產(chǎn)過的代碼,中途又沒動過,問題應(yīng)該出在硬件這塊。建議重點核查外圍元器件及參數(shù)。在進一步檢查晶振相關(guān)元件參數(shù)時,發(fā)現(xiàn)此次產(chǎn)線上焊接的負(fù)載電容比之前設(shè)計原理上的大了很多。同時再次用示波器查看振蕩波形,發(fā)現(xiàn)波形是類似正弦的三角波,峰值幅度是2點多伏,但谷值卻在1V上下,明顯不合理。當(dāng)調(diào)整負(fù)載電容參數(shù)后,波形便是正常的方波了。 順便提下,一般有源晶振輸出為方波,無源晶體振蕩輸出為正弦波。 也就在前2天深圳某客戶使用STM32F411開發(fā)產(chǎn)品,發(fā)現(xiàn)外部晶振振蕩不穩(wěn),軟件調(diào)試時發(fā)現(xiàn)代碼也是?ㄋ涝HSE ready檢測代碼處。其測試代碼非常簡單,就是用STM32CubeMx簡單配置了一個帶HSE的小工程。結(jié)合手冊資料做了晶振周邊器件參數(shù)的檢測比對,沒發(fā)現(xiàn)啥明顯異;虿缓侠淼牡胤,即使做參數(shù)來回調(diào)整也無濟于事。 最后建議換塊測試板,更換后一切OK。問題就出在PCB電路板上,細(xì)節(jié)這里不說了。 對于新產(chǎn)品開發(fā),建議最好準(zhǔn)備兩套以上的板,這對調(diào)試非常有好處。有什么問題時可以比對,加上調(diào)試板的制作往往有很多是手工操作,更容易出各種紕漏。 繼續(xù)回到上面外部晶振振蕩異常的話題,一般主要有三種情況導(dǎo)致異常: 1、軟件上忘記或沒正確配置及使能HSE; STM32芯片的HSE需要軟件代碼使能配置,否則HSE振蕩器是不會工作的。 
2、晶振振蕩回路上的負(fù)載電容值參數(shù)選取不合適;【這點發(fā)生得比較多】 對于STM32各系列芯片,各振蕩線路的負(fù)載電容在相應(yīng)芯片的數(shù)據(jù)手冊上都有描述和推薦。負(fù)載電容的值要選取合適,不可隨意,否則也容易不起振或不穩(wěn)定。 
另外,ST官方針對STMCU的振蕩電路設(shè)計有個應(yīng)用筆記AN2867,可以下載瀏覽。還有,ST 給每個STM32系列都有出評估板及相關(guān)參考原理圖,硬件工程師初次使用某系列MCU時,建議下載相關(guān)硬件原理圖以供參考【當(dāng)然也可以找各代理商FAE索取】。 3、振蕩電路受到外來干擾; 當(dāng)振蕩電路受到外部較強干擾時,比如電源的異常波動,其它零部件的電磁干擾等都可能導(dǎo)致振蕩異常。順便插一句,我們知道電源的穩(wěn)定是整個系統(tǒng)工作的基本需求,但實際應(yīng)用中似乎經(jīng)常有人忽視這點。發(fā)現(xiàn)有人隨手在外邊采購些器件用在電路板上,調(diào)試出現(xiàn)異常時知道懷疑MCU有問題卻往往想不到外圍芯片或供電線路可能有問題。其實很多時候MCU功能的異常只是對整個應(yīng)用系統(tǒng)異常的一種積極的防御反應(yīng),錯并不一定出在這個反映者本身。 在設(shè)計振蕩線路時,振蕩線路要盡量靠近MCU,要選擇合適元器件及參數(shù),盡量遠(yuǎn)離或回避其它明顯的或潛在的干擾源。比如射頻模塊、馬達(dá)相線、產(chǎn)品容易裸露的地方等。 除了上面說的三種情況外,肯定還有其它各種稀奇古怪的細(xì)節(jié)原因,比方代碼里有意無意地做了超頻處理也可能會導(dǎo)致MCU芯片頻繁復(fù)位,此時振蕩電路自然也穩(wěn)不了。 反正不管出現(xiàn)什么異,F(xiàn)象,保持顆淡定的心很重要,有條不紊去找原因就好。問題的答案往往就在您那顆淡定的心里。 |