一个关于HSE晶振振荡异常的话题 关于STM32晶振振荡异常问题,貌似有点老生常谈了。刚好最近又遇到类似案例,一起分享交流下。 一日,某工程师反映使用STM32F107RCT6的产品是已经量产了的,一直没问题。最近重新生产测试时发现产品不能正常工作。客户用的是25M外部有源晶振,示波器测试晶振脚是有波形的【波形具体特征没说】。DEBUG调试检测发现卡死在与HSE有关的时钟初始化代码里。 要么卡死在:
或者卡死在:
根据其描述,既然是量产过的代码,中途又没动过,问题应该出在硬件这块。建议重点核查外围元器件及参数。在进一步检查晶振相关元件参数时,发现此次产线上焊接的负载电容比之前设计原理上的大了很多。同时再次用示波器查看振荡波形,发现波形是类似正弦的三角波,峰值幅度是2点多伏,但谷值却在1V上下,明显不合理。当调整负载电容参数后,波形便是正常的方波了。 顺便提下,一般有源晶振输出为方波,无源晶体振荡输出为正弦波。 也就在前2天深圳某客户使用STM32F411开发产品,发现外部晶振振荡不稳,软件调试时发现代码也是常卡死在HSE ready检测代码处。其测试代码非常简单,就是用STM32CubeMx简单配置了一个带HSE的小工程。结合手册资料做了晶振周边器件参数的检测比对,没发现啥明显异常或不合理的地方,即使做参数来回调整也无济于事。 最后建议换块测试板,更换后一切OK。问题就出在PCB电路板上,细节这里不说了。 对于新产品开发,建议最好准备两套以上的板,这对调试非常有好处。有什么问题时可以比对,加上调试板的制作往往有很多是手工操作,更容易出各种纰漏。 继续回到上面外部晶振振荡异常的话题,一般主要有三种情况导致异常: 1、软件上忘记或没正确配置及使能HSE; STM32芯片的HSE需要软件代码使能配置,否则HSE振荡器是不会工作的。 2、晶振振荡回路上的负载电容值参数选取不合适;【这点发生得比较多】 对于STM32各系列芯片,各振荡线路的负载电容在相应芯片的数据手册上都有描述和推荐。负载电容的值要选取合适,不可随意,否则也容易不起振或不稳定。 另外,ST官方针对STMCU的振荡电路设计有个应用笔记AN2867,可以下载浏览。还有,ST 给每个STM32系列都有出评估板及相关参考原理图,硬件工程师初次使用某系列MCU时,建议下载相关硬件原理图以供参考【当然也可以找各代理商FAE索取】。 3、振荡电路受到外来干扰; 当振荡电路受到外部较强干扰时,比如电源的异常波动,其它零部件的电磁干扰等都可能导致振荡异常。顺便插一句,我们知道电源的稳定是整个系统工作的基本需求,但实际应用中似乎经常有人忽视这点。发现有人随手在外边采购些器件用在电路板上,调试出现异常时知道怀疑MCU有问题却往往想不到外围芯片或供电线路可能有问题。其实很多时候MCU功能的异常只是对整个应用系统异常的一种积极的防御反应,错并不一定出在这个反映者本身。 在设计振荡线路时,振荡线路要尽量靠近MCU,要选择合适元器件及参数,尽量远离或回避其它明显的或潜在的干扰源。比如射频模块、马达相线、产品容易裸露的地方等。 除了上面说的三种情况外,肯定还有其它各种稀奇古怪的细节原因,比方代码里有意无意地做了超频处理也可能会导致MCU芯片频繁复位,此时振荡电路自然也稳不了。 反正不管出现什么异常现象,保持颗淡定的心很重要,有条不紊去找原因就好。问题的答案往往就在您那颗淡定的心里。 文章出处: 茶话MCU |