前言
問題由客戶提出,用戶發(fā)現(xiàn)在STM32F103器件上。用戶在產(chǎn)品中使能了IWDG,在使用過程中發(fā)現(xiàn)當(dāng)MCU被復(fù)位后,有時(shí)程序跑不下去;跟蹤代碼發(fā)現(xiàn)程序死在輪詢PLL_RDY處。用戶反饋說用的就是ST庫中的范例代碼,懷疑STM32F103有設(shè)計(jì)問題 。
調(diào)研
排查硬件供電無問題,用示波器測(cè)量NRST發(fā)現(xiàn)復(fù)位信號(hào)正常,用STM32CubeMX生成最小系統(tǒng)代碼(時(shí)鐘配置+IWDG)反復(fù)驗(yàn)證,未發(fā)現(xiàn)此問題,開始懷疑用戶代碼。
客戶聲稱開發(fā)是基于ST提供的SPL庫中自帶的demo,使用SPL中的范例代碼加上IWDG復(fù)位,確實(shí)可以復(fù)現(xiàn)此問題:通過調(diào)試器跟蹤代碼發(fā)現(xiàn)問題發(fā)生時(shí)HSE_RDY位被異常置位(用戶平臺(tái)無外掛高速時(shí)鐘源)。
通過分析代碼,發(fā)現(xiàn)SPL庫【標(biāo)準(zhǔn)外設(shè)固件庫】在配置時(shí)鐘時(shí)先會(huì)直接使能HSE,并對(duì)HSE_RDY位進(jìn)行檢測(cè)。在復(fù)位MCU若干次后HSE_RDY可能位會(huì)被置位,從而導(dǎo)致時(shí)鐘配置程序按照基于HSE的狀態(tài)來進(jìn)行接下來的配置。而SPL中的demo是跑在STM32F1評(píng)估板上,而評(píng)估板外帶高速時(shí)鐘源,故沒有此問題。
結(jié)論
在MCU復(fù)位后,HSE_ON雖默認(rèn)無效,但反復(fù)對(duì)其進(jìn)行使能操作會(huì)導(dǎo)致MCU內(nèi)部的噪聲積累,造成時(shí)鐘檢測(cè)電路誤判,并從寄存器反映出來。
- 對(duì)STM32F103來說,一旦HSE_RDY被置位,只要不斷電,無論怎樣復(fù)位MCU,HSE_RDY都不會(huì)被清除(即使失能HSE_ON) 。
- 對(duì)STM32F030單片機(jī)進(jìn)行類似操作,也會(huì)發(fā)現(xiàn)同樣問題。不同之處在于在HSE_RDY被置位后復(fù)位MCU,HSE_RDY位會(huì)被清除,但是一旦HSE_ON被置位,HSE_RDY同樣可能會(huì)出現(xiàn)被置位問題 。
處理
由于用戶不使用外部HSE,即并不需要對(duì)是否有外接高速晶振進(jìn)行判斷,故修改用戶代碼不再使能HSE。反復(fù)測(cè)試后問題不復(fù)現(xiàn) 。
建議
1 、要了解HSE_RDY位是用來檢測(cè)是否有外部時(shí)鐘存在的必要條件,而非充分條件。
2、使用STM32時(shí),盡量按照實(shí)際設(shè)計(jì)對(duì)軟件做出相應(yīng)修改,切勿圖省事而帶來問題。
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44553瀏覽量
634735
原文標(biāo)題:無外部高速時(shí)鐘時(shí)HSE_RDY被意外置位
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論