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