STM32单片机

文章数:1121 被阅读:2938180

账号入驻

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

最新更新时间:2017-08-28
    阅读数:

前言

问题由客户提出,用户发现在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时,尽量按照实际设计对软件做出相应修改,切勿图省事而带来问题。


===========================

往期话题链接:

1、电机控制单电阻采样PWM变形信号的产生

2、一个使用外部 SRAM 导致死机的案例

3、STM32L4中STOP2 模式下的漏电流分析

4、串口工作在DMA模式下有时接收异常的案例

5、获取ST MCU资料及相关支持的方式与途径





最新有关STM32单片机的文章

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved