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

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

3天内不再提示

时钟失效之后,STM32还能运行?

STM32嵌入式开发 来源:STM32嵌入式开发 2022-12-30 16:20 次阅读

问题:

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

调研:

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

40e426d8-8805-11ed-bfe3-dac502259ad0.jpg

40f6e1e2-8805-11ed-bfe3-dac502259ad0.jpg

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

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

4111db5a-8805-11ed-bfe3-dac502259ad0.png

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

413206d2-8805-11ed-bfe3-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 的功能,也可以使用陷阱让程序的流程停留在服务程序中,从而等待看门狗复位整个系统。

418658b8-8805-11ed-bfe3-dac502259ad0.jpg

审核编辑:汤梓红

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

    关注

    10

    文章

    551

    浏览量

    70502
  • STM32
    +关注

    关注

    2253

    文章

    10779

    浏览量

    351591
  • pll
    pll
    +关注

    关注

    6

    文章

    764

    浏览量

    134778
  • 时钟
    +关注

    关注

    10

    文章

    1650

    浏览量

    130816

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

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F1系列单片机的时钟系统

      这是 stm32时钟系统, 时钟与单片机的关系就好比心脏与人的关系一样,它为单片机的 运行提供时间基准。 STM32F1系列单片机的
    发表于03-23 17:44 2602次阅读
    <b class='flag-5'>STM32</b>F1系列单片机的<b class='flag-5'>时钟</b>系统

    晶振损坏了,STM32还能正常运行

    晶振损坏了, STM32 还能正常 运行
    的头像 发表于09-21 17:10 738次阅读
    晶振损坏了,<b class='flag-5'>STM32</b><b class='flag-5'>还能</b>正常<b class='flag-5'>运行</b>?

    STM32MP135裸机开发程序掉电之后还能运行吗?

    目前是直接使用 STM32CubeIDE下载在SYSRAM 中 运行的,请问ST的大佬们, 1、可否通过把应用程序放在SD卡或者EMMC中,然后复位 之后,程序再加载到SYSRAM或在DDR中 运行
    发表于03-11 07:39

    RCC系统时钟stm32例程

    关于RCC系统 时钟stm32例程是一个完整的程序,可以 运行
    发表于12-07 14:33 16次下载

    STM32时钟

    STM32 时钟配置的总结
    发表于01-14 11:05 3次下载

    为什么时钟失效后CPU还在运行

    据其工程师讲述:在其产品的设计中, STM32的 HSE 外接 8MHz 的晶体产生振荡,然后通过 STM32内部的PLL 倍频到 72MHz,作为 STM32的系统 时钟,驱动芯片
    的头像 发表于08-29 17:42 6456次阅读
    为什么<b class='flag-5'>时钟</b><b class='flag-5'>失效</b>后CPU还在<b class='flag-5'>运行</b>?

    STM32F10x常见的应用讲解分析概述

    STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成 STM32的外部振荡器 失效,所以在芯片中需要一种包含机制能够在 STM32
    发表于10-25 15:35 2次下载
    <b class='flag-5'>STM32</b>F10x常见的应用讲解分析概述

    STM32F10x单片机的常见应用分析

    STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成 STM32的外部振荡器 失效,所以在芯片中需要一种包含机制能够在 STM32
    发表于12-10 08:00 4次下载
    <b class='flag-5'>STM32</b>F10x单片机的常见应用分析

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

    72MHz,作为 STM32的系统 时钟,驱动芯片工作。在 STM32片外有专用的看门狗芯片,监控 STM32运行
    的头像 发表于10-29 17:58 2989次阅读
    <b class='flag-5'>时钟</b><b class='flag-5'>失效</b>后<b class='flag-5'>STM32</b><b class='flag-5'>还能</b><b class='flag-5'>运行</b>是什么情况

    STM32移植到GD32,将内部时钟切换为外部时钟后无法运行的问题分析

    1. 前言作者之前用过GD32芯片,也成功移植过 STM32代码到GD32芯片,但最近移植一份 STM32代码到GD32后 运行的时候发现一个问题:使用内部 时钟时一切正常,一旦切换为使用外部
    发表于12-02 15:36 17次下载
    <b class='flag-5'>STM32</b>移植到GD32,将内部<b class='flag-5'>时钟</b>切换为外部<b class='flag-5'>时钟</b>后无法<b class='flag-5'>运行</b>的问题分析

    STM32学习笔记--时钟系统

    ,它们工作的核心都是大规模的时序逻辑电路,而驱动电路的关键则是准确而且稳定的 时钟源。 时钟为时序电路提供基本的脉冲信号,用于协调和同步各单元 运行。  51单片机不需要配置 时钟,是因为一个
    发表于12-05 19:51 13次下载
    <b class='flag-5'>STM32</b>学习笔记--<b class='flag-5'>时钟</b>系统

    STM32CubeMX | 基于STM32使用HAL库驱动RTC时钟及闹钟功能

    STM32使用HAL库驱动RTC 时钟及闹钟功能目录 STM32使用HAL库驱动RTC 时钟及闹钟功能(一)工程配置(二)代码编写(三) 运行效果本
    发表于12-06 09:21 52次下载
    <b class='flag-5'>STM32</b>CubeMX | 基于<b class='flag-5'>STM32</b>使用HAL库驱动RTC<b class='flag-5'>时钟</b>及闹钟功能

    【自学笔记】STM32时钟系统详解

    什么是 时钟时钟是单片机 运行的基础, 时钟信号推动单片机内各个部分执行相应的指令。 时钟系统就是CPU的脉搏,决定CPU速率。片机有了
    发表于12-09 13:21 11次下载
    【自学笔记】<b class='flag-5'>STM32</b><b class='flag-5'>时钟</b>系统详解

    STM32入门系列-STM32时钟系统,STM32时钟

    时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常 运行时钟系统犹如人的心脏,一旦有问题整个系统就崩溃。我们知道 STM32属于高级单片机,其内部有很
    发表于01-17 11:22 6次下载
    <b class='flag-5'>STM32</b>入门系列-<b class='flag-5'>STM32</b><b class='flag-5'>时钟</b>系统,<b class='flag-5'>STM32</b><b class='flag-5'>时钟</b>树

    时钟失效之后STM32还能运行

    STM32片外有专用的看门狗芯片,监控 STM32运行STM32内部的软件会在 STM32的某个管脚上产生脉冲来复位看门狗。
    发表于02-08 15:19 0次下载
    <b class='flag-5'>时钟</b><b class='flag-5'>失效</b><b class='flag-5'>之后</b>,<b class='flag-5'>STM32</b><b class='flag-5'>还能</b><b class='flag-5'>运行</b>?