(LSE TIMEOUT)
一、 现象描述
现象:板子烧录完程序,无法启动。此时有多种可能导致系统正常启动:
1. 烧录方面:没烧录boot或app、烧录导致内部flash锁死
2. 硬件方面:硬件的供电系统、晶振无法正常起振、复位电路正常、板子是否存在虚焊或短接问题、内部flash损坏(低概率)
3.软件方面:没锁住供电引脚电平、程序跑死
经过对比测试,确认不是烧录、供电和程序问题。然后通过jlink直接进行调试发现系统卡在了等待lse(32.768kHz)准备就绪函数里面,如上图所示:
查看stm32数据手册中 RCC 章节的寄存器:
(LSE oscillator not ready)
说明LSE晶振异常,LSERDY没有硬件置1。为了进一步确定此点通过MCO引脚输出LES波形用示波器看看是否正常,以及有没有开启晶振的CSS功能。随后通过正常板子和出问题板子的对比发现,晶振异常的板子确实无法输出正常波形,即使注释掉上面等待 LSE ready部分的代码也无法在mso引脚中输出振荡的方波。所以能够确认异常的板子就是LSE无法正常起振导致系统无法正常启动。
1、查看芯片手册中 LSE 晶振的外围电路:
出问题板子的电容(CL1&CL2)由于贴片失误变成了100pF,正常的要求在6pF~22pF。随后将板子上的 100pF 电容去掉,焊接 15pF 电容后,系统变为正常。问题解决!
2、查看晶振手册电气参数:
二、 为什么电容变化会导致无法正常起振
LSE(Low-Speed External)晶振是嵌入式系统中常见的低频时钟源(通常为 32.768kHz),其稳定性和起振能力高度依赖于外围电路的电容匹配。接下来从晶振工作原理和电容的作用出发,详细解释为什么电容值错误会导致系统无法启动:
1、 晶振的工作原理与负载电容
晶振是一种基于压电效应的谐振器,其振荡频率由晶体的物理特性决定。但实际电路中,晶振的振荡频率不仅取决于晶体本身,还与外围电路中的 负载电容(Load Capacitance, CL) 密切相关。
2、负载电容的作用:
负载电容是晶振两端并联的电容(通常为两个电容串联接地),其作用是补偿晶振的寄生电容和电路中的杂散电容(PCB走线、芯片引脚等),确保晶振工作在标称频率(如 32.768kHz)。
3、 电容值错误的直接影响
负载电容过大导致频率偏移,会显著降低晶振的振荡频率。对于32.768kHz晶振,负载电容偏差可能导致频率降低到20kHz以下,甚至无法起振。此时,MCU 检测不到有效的时钟信号,系统无法完成初始化。