ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

STM32F103 LSE起振失败排查:硬件电路与软件配置全解析

2026/8/31 21:51:35 拓冰建站 浏览量
STM32F103 LSE起振失败排查:硬件电路与软件配置全解析 做 STM32F103 的朋友跟 LSE 打过交道的应该都懂那种感受程序烧进去RTC 不走备份寄存器写不进去代码明明在跑却像被什么东西卡住了一样。最气人的是用示波器去点 OSC32_IN 引脚干干净净一条直线死活看不到 32.768kHz 的波形。这个 32.768kHz 低速外部时钟算是这颗芯片上最容易让人血压升高的外设之一。LSE 起振失败这个事说大不大说小不小。说它不大是因为它不影响主程序运行HSE/PLL 照常工作LED 照样闪烁说它不小是因为一旦 RTC 依赖 LSE时间不走、闹钟不响、唤醒失效整个系统就像个断了线的钟表表面看还在走实际上已经废了。更麻烦的是这个问题从纯硬件到纯软件都有可能导致而且有时候是硬件和软件叠加在一起排查起来尤其痛苦。这篇文章我打算把从原理到实战的完整排查过程掰开揉碎讲一遍覆盖晶振电路设计、负载电容匹配、PCB 布线、寄存器配置、初始化时序、超时机制、批量生产不良率这些环节。不管你是正在调第一块板子的新手还是被量产不良率折磨的老兵应该都能在里面找到对应自己症状的那一页。1. 先从现象说起LSE 起振失败到底是什么样1.1 三种最典型的故障现场我见过太多人问LSE clock not starting correctly这个问题但每个人嘴里的不起振其实症状差别很大。这里先归类一下因为不同的现象指向的排查方向完全不同。第一种是代码卡死型。程序跑到初始化 RTC 的代码里就出不来了典型的长这样RCC_LSEConfig(RCC_LSE_ON); while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) RESET) { // 永远停在这里 }这种是最直观的不起振LSERDY 标志一直不置位循环条件永远为真。很多新手会把这种现象误认为是代码执行卡住实际上是 LSE 振荡器根本没工作。这种问题可能是硬件起振失败也可能是软件超时机制缺失导致的主程序阻塞。第二种是 RTC 不走时型。程序能正常启动RTC 初始化也成功了但时间不走或者偶尔走一走、停一停复位后就回到初始时间。这种往往是 LSE 起振了但幅度不稳或者起振之后因为某种原因又停振了。问题比完全不起振更隐蔽因为它不是稳定的失败而是间歇性的。第三种是备份域异常型。往备份寄存器里写数据读出来是错的或者根本写不进去。LSE 晶振和备份寄存器都在备份域里如果备份域供电异常或者复位控制配置不对LSE 也会受影响。我见过有人折腾了半天晶振电路最后发现是 VBAT 引脚没接电、备份域一直处于复位状态。1.2 LSE 在时钟树里到底是什么角色STM32F103 的时钟系统里LSE 全称是 Low Speed External低速外部时钟频率固定在 32.768kHz。这个频率不是随便选的2 的 15 次方正好等于 32768所以拿它做 RTC 的时钟源分频到 1 秒非常干净不需要小数分频误差只取决于晶振本身的精度。注意LSE 只服务两个东西RTC 和备份域寄存器。独立看门狗 IWDG 用的是内部 LSI不是 LSE这个不要搞混。LSE 所在的时钟域是独立的备份域由 VBAT 引脚供电所以即使主电源 VDD 断掉只要 VBAT 有电RTC 依然能走、备份寄存器依然能保持。这也是为什么很多人用纽扣电池给 VBAT 供电做掉电保持。在 RCC_BDCR 寄存器里LSE 的控制位包括 LSEON使能、LSERDY就绪标志、LSEBYP旁路模式、LSEDRV[1:0]驱动能力。这些位都在备份域里所以访问之前必须先打开 PWR 和 BKP 时钟再通过 PWR_BackupAccessCmd(ENABLE) 解除写保护。一句话总结LSE 不仅振荡器本身讲究访问它的配置通道也有讲究。1.3 先定性再定量第一步该往哪个方向查拿到一个 LSE 不起振的问题我从来不直接动烙铁或者改代码而是先花两分钟做定性判断。思路很简单如果是全新板子第一次上电就不起振优先怀疑硬件电路如果之前好好的改了点东西之后不起振了优先怀疑软件改动如果批量生产中出现概率性不良优先怀疑设计裕量不足。这个判断看起来是废话但真的能省大量时间。我见过太多人拿着万用表趴在板子上量电容电阻最后发现是代码里超时时间写短了LSE 起振本身需要几百毫秒他给了 50ms 的等待窗口。反过来也一样有人翻来覆去改寄存器配置最后发现晶振引脚虚焊了。判断硬件还是软件有一个简单粗暴但很有效的办法用一根镊子或者手指同时接触 OSC32_IN 和 OSC32_OUT 两个引脚轻轻短接一下再放开。如果程序恢复运行或者 RTC 开始走时说明振荡器本身是能起振的只是起振条件太临界问题基本在电路参数或驱动能力上而不会是完全的硬件断路。如果短接之后毫无反应再把注意力放到焊接和软件使能上。2. 硬件侧排查晶振电路和 PCB 布局几乎是重灾区2.1 先看原理图晶振型号和负载电容必须匹配LSE 电路从原理图上看非常简单一个晶振接在 OSC32_IN 和 OSC32_OUT 之间每个引脚对地各接一个负载电容。很多人的板子就是照着开发板抄的电容值也是照抄但开发板上用的晶振和你手上用的晶振负载电容要求可能完全不同这就是问题根源之一。32.768kHz 晶振的参数里有一个最重要的指标叫负载电容 CL。这个值通常印在晶振的规格书上常见的有 6pF、9pF、12.5pF。外部匹配电容不是随便选的要按公式算CL (C1 × C2) / (C1 C2) Cs其中 C1 和 C2 是接在 OSC32_IN、OSC32_OUT 上的两颗电容Cs 是 PCB 走线和引脚引入的杂散电容一般在 3~5pF 左右。假设晶振的 CL 是 12.5pF取 C1 C2 C则12.5 C/2 4杂散电容取 4pFC (12.5 - 4) × 2 17pF所以取标准的 18pF 或者 20pF 比较合适。如果晶振的 CL 是 6pF同样的算法6 C/2 4C 4pF那就应该取 4.7pF 或者 5pF而不是照抄开发板的 20pF。这里特别提醒负载电容太大不会让振荡器慢慢起振而是可能直接让起振条件不满足或者起振后频率偏差过大、停振率升高。我在实际项目中遇到过 CL6pF 的晶振配 20pF 电容常温下勉强能起振温度稍一变化就停振非常折磨人。2.2 负载电容选择速查下面这个表格是工程中常用的匹配参考注意实际取值还要考虑杂散电容和晶振本身的 ESR 参数晶振负载电容 CL外部器件 C1/C2 参考值含杂散说明6pF4.7pF ~ 6.8pF对 PCB 布局非常敏感杂散电容影响大9pF10pF ~ 12pF兼容性较好多用于低功耗产品12.5pF18pF ~ 22pF最常见对布局不太敏感适合新手7pF6.8pF ~ 10pF常见于日系晶振注意核对规格书选电容的时候还要注意电容的精度和温度特性。NPO/C0G 材质最好X7R 也凑合千万不要用高介电常数的小体积电容比如 0402 封装的 Y5V那玩意在不同电压下容值都会漂用在振荡电路里就是给自己挖坑。2.3 PCB 布线OSC32 走线的讲究比你想的多LSE 是 32.768kHz 的低频信号但很多人在布线时并不在意觉得这么低的频率随便走两下就行。事实上恰恰相反正因为频率低、信号幅度小、起振能量微弱PCB 布局对它的影响反而很大。首先是晶振的位置。要尽量靠近 MCU 的 OSC32_IN 和 OSC32_OUT 引脚走线越短越好。两条走线要等长、对称不要一根绕了远路另一根直连也不要在这两根走线下面铺一条电源线或者高频信号线。我见过一块板子OSC32_IN 走线旁边有一条 I2C 的数据线I2C 每次通信的时候 RTC 就会偶尔停一下查了三个星期才定位到是串扰。其次是地平面的处理。晶振下方最好有一个完整的地平面不要被其他走线切断。晶振外壳如果是金属的可以考虑接地但要通过焊盘单独连接不要跟 OSC32_IN/OUT 的走线有任何接触。另外晶振周边不要放置开关电源电感、DC-DC 芯片这类强干扰源如果实在躲不开至少要加一个地线隔离带。还有一个很容易被忽略的点OSC32_IN 和 OSC32_OUT 引脚之间不要铺粗的电源走线或者大面积的铜箔。这两个引脚之间的分布电容会直接影响振荡器的负阻特性走线太近太粗等于无形中给晶振并了一个电容导致起振裕量下降。2.4 焊接与物料虚焊、批次、一致性硬件排查到一定程度就该拿放大镜看焊点了。32.768kHz 晶振常见的是 3215 或者 2012 封装的贴片晶振引脚很小虚焊和连焊都不容易被肉眼发现。我建议用万用表二极管档量一下 OSC32_IN 到晶振引脚之间的通断不行就补焊一下很多时候问题就出在一颗不起眼的虚焊上。另外一个容易踩坑的地方是晶振的批次和真伪。32.768kHz 晶振是很成熟的物料但也正因为成熟市场上杂牌货很多。正规大厂的晶振规格书里会给出 ESR等效串联电阻参数一般在 30kΩ~70kΩ 之间。ESR 过大的晶振很难起振尤其是配合小负载电容的时候。有条件的话用阻抗分析仪或者晶振测试仪测一下来料参数没有条件就尽量选靠谱的供应商这块省不了几个钱但会给你省很多时间。在低温环境下晶振的起振裕量会变差。如果你发现产品在冬天的批量不良率明显高于夏天基本可以认定是晶振电路的温度裕量不足。解决方向有两个一是把 LSEDRV 驱动能力调高一档给振荡器更多能量二是让负载电容稍微小一点降低阻尼。这两个方向都要实测验证不要拍脑袋改。2.5 示波器实测为什么你测不到波形很多人把示波器探头往 OSC32_IN 上一戳发现没有波形就断定晶振没起振。这个结论下得太草率了。实际情况是正常工作的 32.768kHz 振荡器在 OSC32_IN 上的信号幅度只有几百毫伏而且是一个很微弱的正弦波如果用数字示波器默认的 1V/div 档位去看看到的确实接近一条直线。更重要的是示波器探头本身就有十几 pF 的输入电容戳上去等于给振荡器并了个大电容完全可能把一个本来就勉强起振的电路压死不振。所以在测量 LSE 时建议用 10× 衰减档的探头输入电容会小一些信号失真也会小一些。还有一招是不要直接测晶振引脚而是测 MCU 上 RTC 分频后的秒脉冲输出或者通过 RTC 闹钟翻转一个 GPIO间接判断 LSE 是否在工作这样就不存在探头对振荡电路的干扰问题。有没有办法在不接触引脚的情况下确认 LSE 是否振荡可以用一个 AM 收音机接近晶振区域如果能听到明显的差拍声说明 32.768kHz 信号存在。这个方法比较玄学我一般当作现场快速判断手段不算正规测试手段但确实能在没有示波器的情况下帮你筛掉一批完全没起振的板子。3. 软件侧检查从寄存器到初始化时序的逐项核对3.1 LSE 初始化标准流程与常见写法硬件电路看着没问题接下来就要把软件初始化逐行检查一遍。STM32F103 上用标准库初始化 LSE 的标准流程其实就六步但每一步都有讲究。先看代码static uint8_t BSP_LSE_Init(void) { uint32_t timeout 0; // Step1: 打开 PWR 和 BKP 外设时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); // Step2: 解除备份域写保护 PWR_BackupAccessCmd(ENABLE); // Step3: 使能 LSE RCC_LSEConfig(RCC_LSE_ON); // Step4: 等待 LSERDY 置位并带超时保护 timeout 0; while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) RESET) { if (timeout 2000000) { return 1; // 超时返回失败 } } // Step5: 选择 LSE 作为 RTC 时钟源 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // Step6: 使能 RTC 时钟 RCC_RTCCLKCmd(ENABLE); return 0; }这个流程里最值得注意的就是 Step4 的超时。很多项目里的 LSE不起振其实是超时时间太短程序在 LSE 还没就绪的时候就判定失败并跳出了等待循环。32.768kHz 晶振的起振时间比 HSE 长得多几十毫秒到几百毫秒都很常见在极端温度下甚至需要一两秒如果沿用 HSE 的等待超时很容易误判。超时循环的次数和主频直接相关。上面这个 200 万次循环在 72MHz 主频下大约对应 1 秒多在 8MHz 内部时钟下大约对应 3~4 秒。如果你用的是 8MHz 主频这个值可以适当调大反正死等的时间长一点对用户没有感知初始化一次而已但能显著降低误判概率。另外要注意RCC_LSEConfig(RCC_LSE_ON) 这个函数执行前CPU 主频最好已经是稳定的。有些代码在系统时钟还没完全切到 HSE/PLL 之前就去操作 LSE虽然寄存器操作本身没问题但此时 SysTick 或者延时函数的精度不可靠超时时间会不准。3.2 HAL 库的 RTC 初始化埋点如果你用的是 HAL 库情况会有点不一样。HAL 库把 LSE 的初始化放在了 HAL_RTC_MspInit 回调函数里而 HAL_RTC_Init 内部在使能 RTC 之前会等待 LSE 就绪。问题是 HAL 库默认的等待方式是死等没有超时void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) { __HAL_RCC_PWR_CLK_ENABLE(); __HAL_RCC_BKP_CLK_ENABLE(); HAL_PWR_EnableBkUpAccess(); __HAL_RCC_LSE_ENABLE(); // 注意这里是简单的 while 等待没有超时 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) RESET) { } __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE); __HAL_RCC_RTC_ENABLE(); }实际项目中我建议把这个死等的 while 改成带超时的版本或者至少加一个计数保护。原因很实际如果板子在装配过程中出现问题LSE 永远无法就绪这个死等会让整个系统在启动阶段就进入假死状态。你无法在产测线上快速区分软件卡死和硬件不良对效率影响很大。另外一个 HAL 库的坑是备份域复位。使用 HAL 库时启用备份域寄存器访问后如果上一次程序配置过备份域复位或者代码在初始化之前调用了 HAL_RTC_DeInit()可能会导致备份域被整体复位LSE 配置也会被清掉。这也是为什么有些人发现程序明明初始化成功了断电重启后 RTC 却停在 1970 年因为 LSE 配置在断电后没有保持住。3.3 LSEDRV 驱动能力默认值不一定适合你的晶振STM32F103 的 RCC_BDCR 寄存器里有一个 LSEDRV[1:0] 位专门控制 LSE 振荡器的驱动能力。标准库中对应的是 RCC_LSEDriveConfig() 函数可选参数如下参数宏驱动能力适用场景RCC_LSE_LOW低低功耗晶振ESR 较小RCC_LSE_MEDIUMLOW中低常规晶振默认推荐RCC_LSE_MEDIUMHIGH中高ESR 偏大或负载电容偏大RCC_LSE_HIGH高起振困难或极端环境默认情况下芯片复位后 LSEDRV 是低驱动这在很多情况下是够用的但如果你遇到常温正常、低温不起振或者用示波器探针一碰就停振这类问题第一个可以尝试的方向就是把驱动能力提高到中高或者高然后实测起振成功率。代价是 LSE 的功耗会略有上升对于电池供电的产品需要权衡一下但如果 RTC 是常开的这点功耗占比通常可以接受。我一般建议在开发阶段就用高驱动模式做测试如果高驱动下起振可靠且无明显副作用量产时就保持高驱动。一来减少因晶振批次差异带来的风险二来省去后面量产阶段反复验证驱动等级的麻烦。3.4 BYPASS 模式和外部时钟源什么样的场景才会用到LSE 还有一个旁路模式LSEBYP 置 1。这个模式下MCU 内部振荡器被禁用OSC32_IN 引脚直接作为外部时钟输入使用外部提供的 32.768kHz 方波信号OSC32_OUT 悬空。什么时候会用到旁路模式典型场景是板子上已经有另一个稳定的 32.768kHz 时钟源比如通信模块的参考时钟不需要再单独放一颗晶振。这个时候开启旁路模式用现成的时钟信号直接喂给 RTC既省了晶振物料又提高了起振可靠性。另外一个场景是某些对频率精度要求极高的应用32.768kHz 晶振的频率精度通常在 ±20ppm 左右而外部时钟源如果是温补晶振TCXO精度可以达到 ±2ppm 甚至更高。标准库中启用旁路模式的写法是RCC_LSEConfig(RCC_LSE_Bypass);注意旁路模式下 LSERDY 同样需要等待而且外部时钟源必须真实存在否则照样卡死。这个模式在生产调试时也可以临时用信号发生器代替晶振来验证 MCU 侧逻辑是否正常是个不错的排查手段。3.5 软件重试机制给 LSE 一个二次机会就算硬件电路完美、寄存器配置正确LSE 在极端环境下依然可能出现偶发起振失败。这时候最实用的软件手段就是重试机制。具体做法是检测到 LSERDY 超时后不要直接报错退出而是先把 LSEON 清掉等几十毫秒再重新使能 LSE再等一次就绪。可以循环重试几次每次间隔时间逐渐加长。我实践下来这个策略能把偶发起振失败的概率降低一个数量级以上。尤其对于电池供电的设备设备在低电压下启动时LSE 起振条件比正常电压下更苛刻加上电池内阻引起的电压跌落偶发失败率明显上升。重试机制相当于给整个系统加了一层软兜底成本极低但收益非常明显。还有一个和重试配套的兜底方案如果重试多次依然失败可以让 RTC 暂时切换到 LSI 内部时钟运行。这样虽然时间精度差很多LSI 的精度大约在 ±1%一天就可能差十几分钟但至少系统能启动、RTC 能走、业务逻辑能继续跑。等到下次设备有机会完全下电再上电时再重新尝试启动 LSE。这种降级运行的设计思路在工业产品中非常重要它的核心是不让一个时钟问题卡死整个系统。4. 实际调试记录三个经典案例还原现场4.1 案例一低功耗唤醒后 RTC 彻底不走之前做一款带 RTC 的仪表现象是正常运行一切正常但一旦进入 STOP 模式再唤醒RTC 就完全停走必须重新上电才行。这个问题的表现很奇怪因为它不是上电就失败而是唤醒后失败。排查过程是这样的先确认唤醒后 LSE 的 LSERDY 标志是否正常结果发现唤醒后 LSERDY 清零了说明 LSE 在 STOP 模式下停振了。进一步查代码发现唤醒后的时钟恢复流程里重新调用了系统时钟配置函数但该函数在切换 SystemClock 时会触发一次时钟安全系统CSS而 CSS 的中断处理函数把 RCC_BDCR 里的一些位给改了LSE 就在这个过程中被关掉了。从现象层面看是LSE 不起振实际是LSE 被代码关掉了。这个案例给我的教训是遇到唤醒后失效类问题永远第一时间去查唤醒后执行的代码路径而不是重新去量晶振。很多时候外设本身没毛病是软件路径把外设状态搞乱了。4.2 案例二冬天低温批量不良率飙升另一款量产产品夏天出货一切正常到了冬天客户反馈 RTC 不走字的概率明显增加。退回的板子测试发现 LSE 确实没有起振但用热风枪加热一下晶振区域重新上电又恢复正常。这个问题的根子是负载电容偏大加上驱动能力不足。原设计用的是 CL6pF 的晶振外部却贴了 10pF 的电容实际匹配后等效负载电容远超规格。在常温下勉强能振低温下一旦晶振 ESR 升高、振荡裕量不足就彻底停振不起。解决方法是把负载电容改成 5pF同时把 LSEDRV 配置成高驱动。改完之后做了整批 100 片的低温测试从 -20℃ 到 -40℃ 反复上电起振成功率从原来的大约 95% 提升到 100%。这个案例说明批量偶发问题往往不是单一变量而是电路参数 驱动配置 环境温度三者共同作用排查时要统筹看待。4.3 案例三仿真器一拔就失败还有一个非常经典的场景用 ST-Link/J-Link 连接调试器时程序跑得好好的LSE 起振、RTC 走时都正常只要一拔掉调试器单独给板子上电RTC 就不走程序甚至可能卡住。这类问题有几种可能。最常见的是调试器连接时给目标板提供了一个稳定的电源和地参考掩盖了目标板电源纹波过大的问题。拔掉调试器后电源噪声偏大LSE 在噪声环境下起振失败。这种情况去检查 LSE 电路本身是看不出问题的罪魁祸首在电源。另一种可能是调试器的 SWD 信号线和 OSC32_IN/OUT 走线间距太近调试器工作时相当于在天线旁边加了一个干扰源反而帮晶振耦合了能量让它更容易起振拔掉之后干扰源消失晶振回到弱势状态无法自持振荡。这种问题需要检查 PCB 布局把 SWD 走线尽量移远或者给晶振区域加屏蔽地。第三种情况是调试器通过 SWD 接口对目标板供电时把 NRST 引脚拉住了导致目标板一直处于复位状态或半复位状态程序没有真正跑起来。把调试器拔掉后 NRST 释放理论上应该正常运行但如果你在初始化代码里用了不正确的复位源判断逻辑就会导致行为不一致。排查这类问题的方法很简单拆掉调试器上的 NRST 连线只保留 SWDIO/SWCLK 连接继续调试如果问题消失就说明和复位时序有关。然后单独用外部电源给板子供电如果问题消失就说明和调试器供电有关接着查板子的电源净化和滤波。4.4 终极兜底方案硬件和软件双保险在实际量产项目中我通常不会把宝全押在晶振一定能起振这个假设上。硬件上会专门留一个串阻的 0 欧位置用于因晶振起振过冲而需要加阻尼的场合软件上则一定会做三个事情第一LSE 初始化带长超时第二超时后执行至少两次重试第三次重试时自动把 LSEDRV 调高第三重试全部失败后给出可观测的错误码方便产测和售后定位问题。另外还有一个比较重要的经验不要在量产固件里让程序无限死等在 LSERDY 上。哪怕你的电路设计得再好制造过程中依然可能出问题。一旦固件死等在这个地方产品在产线上会非常难排查而且用户拿到手也完全无法自恢复。一个带超时、带重试、带降级策略的时钟初始化代码是量产产品的基本素质。5. LSE 相关常见问题速查5.1 故障表现与排查方向对照给出一个速查表方便你在现场快速对照故障现象最可能原因优先排查动作上电就卡在 LSERDY 等待晶振电路不通/超时太短/LSE 未使能先量 OSC32_IN 波形若无波形检查焊接和电容程序能跑但 RTC 不走LSE 虽起振但未选作 RTC 时钟源核对 RCC_RTCCLKConfig 的时钟源选择断电重启时间归零备份域配置丢失或 VBAT 没电检查 VBAT 供电和 BKP 使能流程正常工作时偶尔停振串扰/电源噪声/ESR 过大抓 LSE 停振瞬间的电源纹波检查 PCB 布局低温不起振起振裕量不足提高 LSEDRV、减小负载电容、换低 ESR 晶振调试器连接时正常断开后失败调试器掩盖了电源或时序问题分别用独立电源和去除 NRST 连线交叉排查唤醒/复位后异常软件路径修改了备份域寄存器审查唤醒后的时钟恢复代码更换晶振批次后批量不良新批次晶振参数差异核对 ESR、CL必要时重新匹配电容5.2 参考资料与后续动作关于 LSE 振荡器设计ST 官方有一篇应用笔记 AN2867Oscillator design guide for STM32 microcontrollers强烈建议调 LSE 之前先把这篇啃一遍。虽然它以 STM32 为主线但里面对负阻、激励功率、ESR 匹配的讲解适用于所有 MCU 的晶体振荡电路。中文参考手册里 RCC 章节和 PWR 章节也要重点看特别是备份域的复位控制和 RCC_BDCR 寄存器每一位的含义。如果你的产品已经量产LSE 不良率压在 0.1% 以上还降不下来不要一味想着换晶振或者调电容也可以考虑改用外部有源时钟方案也就是前面说的旁路模式。虽然成本会高一些但可靠性在工业产品中往往比成本更重要。说实话LSE 起振这个问题90% 的根因都在那几个基础项里电容选错、驱动太弱、焊点虚焊、超时时间太短。把这个清单从头到尾过一遍大多数问题都能解决。如果还有解决不了的我的建议是回到源头去量晶振负阻用阻抗测试仪或者示波器网分把振荡回路的负阻值测出来和晶振 ESR 对比负阻至少要是 ESR 的三到五倍留出足够裕量这个问题才算真正从设计上闭环了。