問題描述
客戶調(diào)試 STM32WLE5JB 樣機(jī)的時候遇到這樣一個問題:在調(diào)試 LPUART,不打開外部時鐘的時候,能夠正常打印,若開啟外部的 HSE 和 LSE 后就沒有打印。
問題確認(rèn)
發(fā)現(xiàn)上述問題時,客戶使用 STM32CubeMX 生成的工程,所以首先建議客戶檢查LPUART 的時鐘配置有沒問題,并且讓客戶嘗試使用 STM32Cube_FW_WL_V1.2.0ProjectsNUCLEOWL55JCExamplesUARTLPUART_WakeUpFromStop 例程對比驗(yàn)證。后來客戶發(fā)現(xiàn)是開啟外部時鐘 HSE 和 LSE 后,程序直接卡死HAL_RCC_OscConfig ,測量不到 HSE 的 32MHZ 信號。而客戶的程序移植到 ST 官方的STM32WL NUCLEO 板上可以正常運(yùn)行。通過前面的驗(yàn)證很容易懷疑是不是客戶樣機(jī)外部HSE 32MHZ 的晶振沒有起振。拿到客戶的樣機(jī)后,嘗試更換 32MHZ 晶振,調(diào)整晶振負(fù)載電容和使用 TCXO,發(fā)現(xiàn)都沒辦法測量到 32MHZ 信號,客戶程序依舊卡死在HAL_RCC_OscConfig.
問題分析
由于前面都是用客戶的電腦和程序調(diào)試,客戶的電腦上的 Keil 版本不能單步調(diào)試。針對客戶的問題,基于 STM32WL AT slave 例程,運(yùn)行在客戶樣機(jī)上發(fā)現(xiàn)現(xiàn)象一致,也是卡死在 HAL_RCC_OscConfig 。但使用單步調(diào)試進(jìn)入 HAL_RCC_OscCongig 里面發(fā)現(xiàn),卡死具體的原因不是 HSE,而是 LSE 初始化出了問題,一直在等待 LES ready 的信號。
問題解決
針對 LSE 無法起振問題,嘗試了上面針對硬件和軟件多種方法后依然沒有解決。后來仔細(xì)檢查客戶原理圖發(fā)現(xiàn),客戶在 32.768KHZ 晶振上添加了 1M 的反饋電阻。
小結(jié)
本篇筆記分析了客戶使用外部時鐘調(diào)試 STM32WL LPUART 無法正常工作的問題。最后分析出問題是由 LSE 的 32.768KHZ 晶振沒有正常起振引起。而 32.768KHZ 晶振無法正常起振則是因?yàn)榭蛻粼?32.768KHZ 晶振上添加了 1M 的反饋電阻。雖然在 AN2867 里有對 STM32 晶振使用反饋電阻的建議,但需要注意的是針對 STM32WL 這顆芯片,其規(guī)格書中有明確要求禁止在 32.768KHz 晶振的 OSC32_IN 和 OSC32_OUT 引腳中間添加反饋電阻。后面將客戶樣機(jī)上的 1M 的反饋電阻去掉后,樣機(jī)的 32.768KHz 晶振可以正常起振,程序運(yùn)行正常。雖然最后客戶樣機(jī)使用晶振可以正常起振,但根據(jù) AN2867,客戶晶振的增益裕量是不符合起振條件的。所以為了避免后續(xù)產(chǎn)品量產(chǎn)時出現(xiàn)低速晶振無法起振問題,建議客戶參考 AN2867 選擇合適的 32.768KHz 晶振。