无外部高速时钟时HSE_RDY被意外置位问题

前言
问题由客户提出,用户发现在stm32f103器件上。用户在产品中使能了iwdg,在使用过程中发现当mcu被复位后,有时程序跑不下去;跟踪代码发现程序死在轮询pll_rdy处。用户反馈说用的就是st库中的范例代码,怀疑stm32f103有设计问题 。
调研
排查硬件供电无问题,用示波器测量nrst发现复位信号正常,用stm32cubemx生成最小系统代码(时钟配置+iwdg)反复验证,未发现此问题,开始怀疑用户代码。
客户声称开发是基于st提供的spl库中自带的demo,使用spl中的范例代码加上iwdg复位,确实可以复现此问题:通过调试器跟踪代码发现问题发生时hse_rdy位被异常置位(用户平台无外挂高速时钟源)。
通过分析代码,发现spl库【标准外设固件库】在配置时钟时先会直接使能hse,并对hse_rdy位进行检测。在复位mcu若干次后hse_rdy可能位会被置位,从而导致时钟配置程序按照基于hse的状态来进行接下来的配置。而spl中的demo是跑在stm32f1评估板上,而评估板外带高速时钟源,故没有此问题。
结论
在mcu复位后,hse_on虽默认无效,但反复对其进行使能操作会导致mcu内部的噪声积累,造成时钟检测电路误判,并从寄存器反映出来。
- 对stm32f103来说,一旦hse_rdy被置位,只要不断电,无论怎样复位mcu,hse_rdy都不会被清除(即使失能hse_on) 。
- 对stm32f030单片机进行类似操作,也会发现同样问题。不同之处在于在hse_rdy被置位后复位mcu,hse_rdy位会被清除,但是一旦hse_on被置位,hse_rdy同样可能会出现被置位问题 。
处理
由于用户不使用外部hse,即并不需要对是否有外接高速晶振进行判断,故修改用户代码不再使能hse。反复测试后问题不复现 。
建议
1 、要了解hse_rdy位是用来检测是否有外部时钟存在的必要条件,而非充分条件。
2、使用stm32时,尽量按照实际设计对软件做出相应修改,切勿图省事而带来问题。

东风公司L4级5G自动驾驶汽车量产下线
智能镜子显示屏它将成为开启黑科技生活的第一步
陷入风波的先进工艺
2000万超清双摄专业人像模式,OPPOR11再度升级吸引眼球
谁说华为p10拍照最强大,OPPOR9s你确定用过?
无外部高速时钟时HSE_RDY被意外置位问题
使用obd接口有何风险
使用VPLC控制器进行图像拼接的实例
实时频谱分析仪中如何选择合适的FFT窗函数
三星推出新款Galaxy Note 9希望能够吸引iPhone用户
贾跃亭宣布FF将推行“合伙人制度”,将拿出个人股权的64%用于员工激励
PYNQ案例(二):ZYNQ与PYNQ的区别与联系
禾赛打造梦想教室助力偏远乡村教育事业的发展
典型的FPGA方法:如何开始使用Digilent的开发板
上云合作伙伴,华为云桌面致力打造优质云上办公生态
商用车AMT维修技能指南
FHX机架式光纤配线箱的特点和安装说明
浅谈AFC(AFT)电路
智能仪表非线性自动校正方法探讨
具有领先性能、功率和面积比的GPU IP——The PowerVR Series8XT