0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

时钟失效后STM32还能运行是什么情况

GReq_mcu168 来源:STM32单片机 作者:stmcu 2021-10-29 17:58 次阅读

该问题由某客户提出,发生在 STM32F103VDT6 器件上。据其工程师讲述:在其产品的设计中,STM32 的 HSE 外接 8MHz 的晶体产生振荡,然后通过 STM32 内部的PLL 倍频到 72MHz,作为 STM32 的系统时钟驱动芯片工作。在 STM32 片外有专用的看门狗芯片,监控 STM32 的运行。STM32 内部的软件会在 STM32 的某个管脚上产生脉冲来复位看门狗。一旦 STM32 没有及时的产生脉冲来复位门狗,则看门狗会认为 STM32 运行不正常,从而复位 STM32。在对该产品做可靠性测试时,进行了对看门狗监控时钟失效能力的测试。测试的方法是:将 HSE 外接的晶体的两个端子接地,使其停止振荡,从而验证看门狗能否做出对 STM32 的做出复位动作。试验结果表明,看门狗没有产生复位动作。进一步测试发现,STM32 在失效情况下仍在向看门狗发送复位脉冲。详解STM32时钟的文章:详解STM32的时钟系统,收藏了。

调研:

重复测试,确认其所述现象属实。检查软件代码,确认其软件没有开启 STM32 的 CSS功能。修改代码,将 PLL 的二分频从 STM32 的 MCO 管脚送出,以方便用示波器观察。通过控制晶体的管脚是否接地来控制 HSE 是否振荡。当 HSE 正常振荡时,MCO 送出的信号频率为 36MHz,当 HSE 停止振荡时,MCO 送出的信号的频率在 1.7MHz 附近,如图(一)所示:

通过调试器观察寄存器 RCC_CFGR 中的 SWS 控制控制位,其值为[10],说明此时的系统时钟确实来自 PLL 的输出。

从 STM32F103VD 的数据手册中查找 PLL 相关的参数如表(一):

c8633fbe-389b-11ec-82a8-dac502259ad0.png

其中,PLL 的输出频率范围是 16MHz – 72MHz。也就是说,PLL 在处于相位锁定的状态下,可以输出 16MHz – 72MHz 的时钟信号。而当输入信号频率过低而导致输出信号频率低于 16MHz 时,将可能处于失锁的状态。在这状态下,它的输出信号的频率与输入信号的频率之间,不一定符合所设定的倍频与分频关系。更确切的说,不能通过公式:

c8d70d36-389b-11ec-82a8-dac502259ad0.png

得出“输入信号频率为零时,输出信号频率也为零”这样的结论。这一点与实测的结果相吻合。

结论:

STM32 的 PLL 在没有输入信号的情况下,仍能维持在最低的频点处振荡,产生输出。以至,CPU 及其它外设仍能在 PLL 送出的时钟的驱动下运行。所以,通过判断有无时钟来驱动 CPU 执行指令的方式来判断 HSE 是否失效是行不通的。

处理:

对软件做如下修改:

1. 在软件的初始化部分,开启 STM32 的 CSS 功能;

2. 修改 NMI 中断服务程序,加入 while(1) 陷阱语句;

开启 CSS 功能后,当 HSE 失效时,STM32 会自动开启 HSI,并将系统时钟的来源切换到HSI 的输出,同时产生 NMI 中断。这样,程序的流程将停留在 NMI 中而不能产生复位片外的看门狗的脉冲。当片外看门狗溢出后,就会复位 STM32,使其恢复到正常驻的状。

建议:

STM32 中的 CSS 功能是专门为检测和处理 HSE 失效而设计的。但该功能在 STM32 复位后是被禁止的,需要软件对其使能才会发挥作用。当 CSS 单元检测到 HSE 失效时,它会使能 HSI,并将系统时钟切换到 HSI。同时,它会关闭 HSE,如果 PLL 的输入信号来自 HSE的输出,它也会关闭 PLL。CSS 单元在做时钟调整的同时,也会产生一个 NMI 中断请求,和一个送给高级定时器的刹车信号。NMI 中断请求会产生一个 NMI 中断,以便用户程序可以在中断服务程序中做紧急处理,而刹车信号则是使高级定时器进入刹车状态,以防止由其控制的电机驱动桥臂由于失去控制而过流。用户程序可以在 NMI 中断服务程序中尝试恢复 HSE 及 PLL 的功能,也可以使用陷阱让程序的流程停留在服务程序中,从而等待看门狗复位整个系统。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354713
  • 时钟
    +关注

    关注

    10

    文章

    1720

    浏览量

    131341

原文标题:时钟失效之后,STM32还能运行?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么情况下wifi_set_opmode会失败?

    我想知道在什么情况下wifi_set_opmode会失败? 模块运行一段时间,我从 STATION 模式切换到 STATION AP 时遇到问题,试图调试原因。 为我打开模块电源
    发表于 07-12 06:44

    AD7686有模拟电压转换结果为零是什么情况造成的?

    AD7686模拟电压转换结果不对,SCK有时钟与SDO输出,但SDO输出的结果都是低电平 这是什么情况造成的?谢谢
    发表于 05-17 16:30

    stm8液晶显示在断电重启消失是什么情况

    请问,stm8液晶显示在断电重启消失,是什么情况
    发表于 05-13 08:07

    STM8L052芯片在停机halt模式下RTC还能够正常运行吗?

    问题:STM8L052芯片在停机halt模式下RTC还能够正常运行吗?现在的情况运行状态RTC时钟运行
    发表于 04-17 07:13

    STM32F103RET6外部复位引脚,无法复位是什么情况

    STM32F103RET6 外部复位引脚,无法复位,是什么情况? P.S.复位电路没有问题,可正常输出复位信号
    发表于 03-28 09:13

    stm32f429自带网口运行一段时间,出现DMA的ETH_IRQHandler接收中断进不去的原因?

    stm32f429自带网口运行一段时间,出现DMA的ETH_IRQHandler接收中断进不去,但ethertnet_DMA的接收寄存器(DMACHRBAR)一直在增加,发送正常,这个可能是
    发表于 03-20 06:49

    stm32进入stop模式,为什么uart还能触发中断并唤醒stm32呢?

    我的理解是stm32进入stop模式,外设时钟都停掉了,比如uart的时钟,也就是说uart无法收数据了,为什么uart还能触发中断并唤醒
    发表于 03-15 08:16

    STM32F429ZGT6在调试中程序首先运行HAL_Init函数,单片机会自动复位,请问是什么情况

    STM32F429ZGT6在调试中程序首先运行HAL_Init函数,在这个函数里面对嘀嗒定时器进行初始化,在使能定时器的中断时,单片机会自动复位,请问是什么情况
    发表于 03-12 08:24

    Stm32断电无法正常运行的原因?怎么解决?

    自己设计的STM32板子刚开始可以烧录代码运行舵机,然后断电再供电就没反应了,再次烧录也不行,但是烧录LED灯的代码,灯可以正常闪烁,请这种情况怎么办?
    发表于 03-12 06:42

    ad5700输出的Hart信号耦合到ad5421的Cin脚之后,输出幅值降低是什么情况

    ad5700输出的Hart信号耦合到ad5421的Cin脚之后,输出幅值降低是什么情况
    发表于 03-04 08:25

    data flash存了两个标定参数,不能正确读写了是什么情况

    data flash存了两个标定参数,运行一直没有问题, 今天突然就不能正确读写data flash,程序运行是正常的,这是什么情况
    发表于 01-15 06:05

    stm32 外部晶振不振 程序能运行

    STMicroelectronics公司设计的32位ARM Cortex-M微控制器,广泛应用于各种嵌入式应用。当外部晶振无法振荡时,可能会影响STM32的正常工作。本文将探讨在外部晶振不振的情况下,STM32程序能否正常
    的头像 发表于 01-04 09:33 2217次阅读

    表贴绕线电感断路是什么情况

    请教一下各位,表贴绕线电感,万用表测着断路,高倍显微镜显示没断路,X光也看不出来断路,请问这种一般是什么情况呢?
    的头像 发表于 01-04 09:08 480次阅读
    表贴绕线电感断路是<b class='flag-5'>什么情况</b>?

    造成绝缘损坏的原因有哪些?绝缘失效了会导致什么情况

    造成绝缘损坏的原因有哪些?绝缘失效了会导致什么情况? 绝缘损坏的原因非常多样化,主要包括以下几个方面: 1. 机械损坏:机械受力或振动可能导致绝缘材料的破裂、切割或剥离。这类机械损坏可能是由于材料
    的头像 发表于 12-19 15:05 4379次阅读

    当变频器将进线缺相保护关闭,出现缺相运行会出现什么情况

    当变频器将进线缺相保护关闭,出现缺相运行会出现什么情况?谢谢!
    发表于 12-18 07:19