关于关于STM32时钟紊乱导致芯片时间校准失败的问题,解释如下:
关于STM32方案,官方推荐的系统时钟源最好通过外部晶振来提供,主要考虑到石英晶体的频率精度高且稳定,能为高速的外接通信芯片提供高精度高稳定性的时钟。
但单对于集成度高的电路,受限于电路板面积大小,往往要求设计者舍弃一些要求取得折中办法。曾有电子工程师设计一款高集成的加速温度补偿电路。由于对电路板的面积和形状有严格的要求,在满足功能兼顾性能的前提下,不得不放弃外部晶振为SMT32提供系统时钟的选择,只能用内部时钟为系统提供时钟源。本以为这样做不仅可以满足要求,还可以节省石英晶体的成本,但实际上却发生了时钟紊乱问题。详情如下:
由于温度补偿电路在测试阶段需要在温箱环境下产生-40℃~105℃的温度进行测试数据采集并补偿计算。在温度为60℃以下时,电路工作正常,按预期进行。但是当温度抵达65℃时,电路输出的数据明显异常。经过排查发现:原来内部振荡器产生的时钟不仅精度非常低,而且受温度影响大,这导致在高温时时序严重偏离标称值,所以导致了IIC通信时序紊乱,数据读取和分析出错。
同理,如果系统采用的是外部晶振提供的时钟源,当晶振失效时,系统可能往返于外部时钟与内部时钟之间捕捉时钟信号,最终导致芯片时间校准失败。