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

評論