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