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

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

3天内不再提示

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

STM32单片机 来源:未知 作者:佚名 2017-08-29 17:42 次阅读

问题:

该问题由某客户提出,发生在 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 附近,如图(一)所示:

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

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

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

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

结论:

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


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

    关注

    68

    文章

    10434

    浏览量

    206521
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348707
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130304

原文标题:时钟失效后 CPU 还会运行的案例分析

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在运行时计算设计中使用的时钟频率?

    我想知道如何在运行时计算设计中使用的时钟频率(设计使用时钟组件),尤其是组件内部的时钟,例如 UART。 例如,使用 clock_getSourceRegister () 返回
    发表于 01-24 06:09

    STM32F103使用keil5进入debug模式,断点能触发,但是程序还在运行,为什么?

    最近遇到一个问题,使用keil5进入debug模式,断点能触发,但是程序还在运行,就是板子上有个灯还在闪,这是定时器控制的,为啥程序停不下来啊。
    发表于 03-20 06:25

    手机没反应游戏还在运行

    手机是联想 安卓系统手机没反应怎么按都没反应关机也没反应游戏是手机网络游戏 里面的游戏还在自动打怪就是怎么按都没反应只有拔电池
    发表于 09-14 08:55

    电脑关机提示“程序仍在运行

    在Win7系统下关闭电脑,系统上还有未关闭的程序,此时系统就会弹出提示“程序仍在运行”,那么你只能将程序关闭才能正常关机。遇到这样情况该怎么关闭电脑,下面小编告诉大家电脑关机提示“程序仍在运行
    发表于 08-04 14:49

    AD9按住鼠标滚轮缩放的时候,经常会失效

    我的鼠标在运行AD9按住滚轮缩放的时候,经常会失效,要拔插能能恢复,有同学遇到过么
    发表于 06-21 13:36

    用28035调试CLA的时候发现,在线调试时CPU和CLA都在运行,程序下载到板子上FLASHLA程序没有运行请问一下这是什么情况?

    本帖最后由 一只耳朵怪 于 2018-6-14 08:54 编辑 在用28035调试CLA的时候发现:在线调试时能很好地发现CPU和CLA都在运行,程序下载到板子上FLASH,把板子掉电重新上电,发现
    发表于 06-13 11:36

    如何在运行时禁用独立的看门狗

    大家好, 我需要在运行时禁用独立的看门狗。 (在它启动一次)。 这是什么方式。 我也使用LSI作为我的MASTER时钟源。 #iwdg以上来自于谷歌翻译以下为原文 Hi all, i
    发表于 07-29 07:30

    STM32的3种时钟模式

    :时钟全断,CPU电源1.8V也断,唤醒程序又一次运行睡眠模式:内核停止,所有外设包括Cortex-M3核心得外设,如NVIC 系统时钟(
    发表于 08-11 06:16

    请问通过rt_timer_create创建的定时器是否在进入临界区还在运行

    请问在调用rt_enter_critical()进入临界区,通过rt_timer_create创建的定时器是否还在运行呢?在文档里看到默认创建的是硬件定时器,此时进入临界区定时器超时函数应该还能
    发表于 08-31 14:14

    axd调试程序在运行板子没反应怎么解决?

    axd调试程序在运行板子没反应怎么解决?
    发表于 10-17 06:14

    变压器在运行中的几种测试

    变压器在运行中的几种测试   为了保证变压器能够正常运行,应经常进行下列几项测试:   (1)温度测试
    发表于 12-09 11:29 1315次阅读

    高性能CPU时钟网络设计

    讨论了物理设计中时钟网络的设计技术,并以现有的CPU时钟网络的为例,介绍了高性能CPU时钟网络设计技术。
    发表于 12-27 15:28 46次下载
    高性能<b class='flag-5'>CPU</b><b class='flag-5'>时钟</b>网络设计

    关闭电源还在运行

    STM32F103RCT6关闭电源还在运行
    发表于 12-08 11:51 0次下载

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

    STM32 没有及时的产生脉冲来复位门狗,则看门狗会认为 STM32 运行不正常,从而复位 STM32。在对该产品做可靠性测试时,进行了对看门狗监控时钟失效能力的测试。测试的方法是:将 HSE 外接
    的头像 发表于 12-30 16:20 668次阅读

    51单片机for循环结束之后还在运行

    。因此,在这篇文章中,我将详尽、详实、细致地讨论51单片机在循环结束之后还在运行的原因,并提供解决这个问题的措施。 首先,让我们回顾一下51单片机的基本运行原理。51单片机是一个8位微控制器,它具有高度集成的特点,包括CPU
    的头像 发表于 12-26 14:06 329次阅读