STM32外部高速晶振不起振的故障分析
一、故障背景
网上售卖的STM32F103C8T6的核心板如图1所示,由于STM32F103C8T6最小系统核心板的采购成本高达20元/块至40元/块,为了降低采购成本,对其STM32F103C8T6的核心板进行抄板,如图2所示,原来的外部高速时钟电路使用的是HC-49S封装的8Mhz晶振,现换成了3225封装的8Mhz晶振。
图1 网上售卖的STM32F103C8T6的核心板
图2 抄板的STM32F103C8T6的核心板
二、故障现象
当抄板的样品做出来后,在测试时程序跑起来之后发现运行的速度慢了很多,有时程序运行过程中会卡死,特别是500ms延时函数整整过了4秒才出现电平翻转。刚开始以为是程序代码的问题,可检查了好几遍都没找到bug,一筹莫展地站在窗边点燃一根香烟,突然想起了是不是高速时钟失去了倍频作用。于是拿起示波器测量外部8Mhz晶振的波形,看到示波器没有捕捉到8Mhz的正弦波,只有100多khz的杂乱波形如图3所示,由此推断出外部8Mhz晶振电路有问题,接着测量8Mhz晶振和两个起振电容都是正常的,从而确定了是外部8Mhz晶振没有起振,STM32自动切换到内部8Mhz晶振没有倍频,导致运行速度变慢。
如图3 外部8Mhz晶振没有起振的波形
外部8Mhz高速时钟电路如图4所示,起振电容是20pF,一般起振电容很少出问题,怀疑是外部晶振的问题,于是更换了好几个其他品牌商家3225封装的8Mhz晶振,用示波器测量看到波形和图2一样,也是不起振,程序代码运行速度慢。后来飞线接了一个HC-49S封装的8Mhz晶振如图5所示,用示波器测量看到了8Mhz的正弦波如图6所示,说明晶振起振了,此时程序代码运行速度正常。
图4 外部8Mhz高速时钟电路
图5 飞线接了一个HC-49S封装的8Mhz晶振
图6 HC-49S封装的晶振起振的8Mhz正弦波
三、故障分析
找到了问题所在,但是却没想到具体是什么原因引起的,在百度CSDN等平台也没找到原因,自己也没想明白,于是找到做硬件研发的技术大佬请教问题,如图7所示,大佬说是晶振的匹配电容容量有问题(2个起振电容)导致晶振的负载电容过大((2个起振电容的积/和)+2pF-6pF的线路杂散电容,即(C1*C2/C1+C2)+2pF-6pF的线路杂散电容),让我找到这个3225封装的8Mhz晶振的规格书看看负载电容。
图7 向硬件研发的技术大佬请教问题
网上售卖的STM32F103C8T6的核心板给出的原理图上的匹配电容(起振电容)是20pF,而抄板的板子上用的是22pF,在看了看这个3225封装的8Mhz晶振的规格书上面写着负载电容是10pF,如图8所示。
图8 3225封装的8Mhz晶振的规格书
四、故障修复
经过大佬的指点,我恍然大悟,找了2个12pF的电容来替换板子上2个22pF的起振电容,再次用示波器测量就看到了8Mhz的正弦波,如图9所示,程序代码也正常运行,问题到此解决。
图9 更换起振电容后的晶振起振的8Mhz正弦波