1. 问题描述客户调试 STM32WLE5JB 样机的时候遇到这样一个问题:在调试 LPUART,不打开外部时钟的时候,能够正常打印,若开启外部的 HSE 和 LSE 后就没有打印。- d$ s" ~: Y& d! f4 B: Q9 O 2 z5 I& w3 E. o; r n; A 2. 问题确认! q, h6 q3 j1 n; A 发现上述问题时,客户使用 STM32CubeMX 生成的工程,所以首先建议客户检查LPUART 的时钟配置有没问题,并且让客户尝试使用 STM32Cube_FW_WL_V1.2.0\Projects\NUCLEOWL55JC\Examples\UART\LPUART_WakeUpFromStop 例程对比验证。后来客户发现是开启外部时钟 HSE 和 LSE 后,程序直接卡死在HAL_RCC_OscConfig ,测量不到 HSE 的 32MHZ 信号。而客户的程序移植到 ST 官方的STM32WL NUCLEO 板上可以正常运行。通过前面的验证很容易怀疑是不是客户样机外部HSE 32MHZ 的晶振没有起振。拿到客户的样机后,尝试更换 32MHZ 晶振,调整晶振负载电容和使用 TCXO,发现都没办法测量到 32MHZ 信号,客户程序依旧卡死在HAL_RCC_OscConfig.$ [5 w& z x e+ J& Z" C + }2 @1 w! L# t8 N1 n 3. 问题分析( y \9 ], _5 b1 x; x 由于前面都是用客户的电脑和程序调试,客户的电脑上的 Keil 版本不能单步调试。针对客户的问题,基于 STM32WL AT slave 例程,运行在客户样机上发现现象一致,也是卡死在 HAL_RCC_OscConfig 。但使用单步调试进入 HAL_RCC_OscCongig 里面发现,卡死具体的原因不是 HSE,而是 LSE 初始化出了问题,一直在等待 LES ready 的信号。具体代码如下:
针对上面的分析,把 RTC 时钟源更改为 HSE_RTC,如下图一,图二, AT slave 例程可以正常运行,32MHZ 晶振可以起振,使用 AT 指令可以测量出 RF 有正常发射出信号。& L- P1 Z" {* Q8 h1 d# b3 V! p% g- G . J8 r& F w m2 u, D# e- R " x0 ~9 W$ c! B' R3 q5 |. d( \6 A 7 B; q% E* D: v; L7 ` 同时,对于客户需要使用 LPUART,可以按照图三的时钟配置验证:* @5 K. Q: o4 S8 s( G: x + o3 F+ ^/ o+ R$ [+ u9 j; V5 ?6 d 图三 ( H3 O: e8 ^% F, w! `8 j- v ) _% z( m$ L" u+ z# _ 客户用他们手上样机同步验证,发现结果一致。确实不使用 LSE 后,样机可以正常工作,32MHZ 晶振也可以正常起振。 下一步就要分析导致 LSE 无法正常工作的原因。客户有按建议尝试更换 32.768KHZ 的晶振以及负载。并且调整 LSEDRIVE 为 high 即__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH),发现依然无法正常使用LSE。3 Y1 w4 p1 |. ~& V( \& l , E) G J4 q/ p. [$ G! E - O. M9 P3 v1 j( V/ I M8 U 完整版请查看:附件 |
【无线与云连接】STM32WL私有LoRa网络设计原理以及演示介绍
基于STM32WL LSE 添加反馈电阻后无法起振问题经验分享
STM32WL sub-GHz SoC 未来工业物联网最佳的选择
STM32Wx 助力万物互联3.0
STM32Wx 赋能工业物联网解决方案
基于STM32WL55-NUCLEO开发的LoRaWAN经验分享
【分享】无线测温系统-硬件篇
自己绘制了一个基于STM32WL系列芯片的小板子分享给大家
线下培训|STM32WL 首款LoRa® SoC应用开发及设计 深圳场 倒计时6天
STM32WL助您成为奶牛养殖的“良医”