时钟失效之后,STM32还能运行?
关注、星标公众号,直达精彩内容
来源:STMCU
问题:
该问题由某客户提出,发生在 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 相关的参数如表(一):
其中,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 的功能,也可以使用陷阱让程序的流程停留在服务程序中,从而等待看门狗复位整个系统。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
关注我的微信公众号,回复“加群”按规则加入技术交流群。
点击下面图片,有星球具体介绍,新用户有新人优惠券,老用户半价优惠,期待大家一起学习一起进步。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。
时钟失效之后,STM32还能运行?相关推荐
- esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树
时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...
- 基础——MCU的电源,复位和时钟系统(STM32为例)
目录 1. 电源供电 2. 上电复位和手动复位 2.1 硬件复位 2.2 软件复位 3.1 晶振 3.2 内部时钟和外部时钟的不同 3.3 HSE和LSE外部电路的硬件设计 3.4 时钟具体理解 4. ...
- 面试官:一个线程OOM,进程里其他线程还能运行么?
作者:孤独烟,资深后端工程师,业内知名原创作者! 引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运 ...
- unity 关闭自己脚本_Unity3D 挂载的脚本取消勾选居然还会运行!!
一般来说,从设计初衷来看,把挂在物体上的脚本勾选状态改为不勾选,这个脚本就不会运行. 然而真实情形只是生命周期函数和用户自定义的且外部不被访问的函数不运行罢了: enabled设置为false,且方法 ...
- java进程内存一直没释放_面试官:一个线程OOM,进程里其他线程还能运行么?...
引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? 先说一下答案,答案是还能运行 不瞒大家说, ...
- 高德面试官问我:JVM内存溢出后服务还能运行吗,我一顿操作行云流水
文章开篇问一个问题吧,一个java程序,如果其中一个线程发生了OOM,那进程中的其他线程还能运行吗? 接下来做实验,看看JVM的六种OOM之后程序还能不能访问. 在这里我用的是一个springboot ...
- 计算机睡眠状态游戏还在运行,win10睡眠主机还在运行正常嘛_win10睡眠模式主机还运行如何处理-win7之家...
在运行win10系统过程中,有些用户会给电脑设置睡眠状态,以此保护电脑中硬件的损耗,但是最近有的用户发现自己的win10电脑在进入睡眠模式之后,主机却依旧在运行着,这样就导致设置的睡眠状态毫无意义了, ...
- Everything That Doesn’t Work Yet—— 一切还没有运行完好的事物
Alan Kay, a brilliant polymath who has worked at Atari, Xerox, Apple, and Disney, came up with as go ...
- 电脑计算机主机还在运行吗,win10电脑关机主机还在运行怎么解决
电脑安装了Win10的系统,电脑正常关机时出现电脑主机无法关闭的情况,怎么解决?下面学习啦小编给大家讲解一下关于win10电脑关机主机还在运行的解决方法,希望大家喜欢! win10电脑关机主机还在运行 ...
最新文章
- for语句内嵌例题与个人理解
- 调用Cython时报错: More than one filename match found for utility code Capsule
- 在实际使用中 mysql所支持的触发器有_计算机二级考试MySQL数据库每日一练 12月26日...
- Ajax和JSON-学习笔记02【JQuery方式实现Ajax】
- ansible提权操作
- JMS-activMq与spring进行整合
- 金山安全实验室公布中国互联网六大类钓鱼网站
- g++ 安装python_以后再也不用“教程”:让人举一反三的python配置环境过程 + 超简单原理概括!...
- 现实中简单配置路由器
- dede image.class.php,DEDE模板下载织梦DEDE 核心类TypeLink.class.php功能剖析
- VScode我的setting.json设置,和搜狗输入法配置
- Linux下软件实现raid
- mysql 根据状态输出_mysql show processlist 输出状态说明
- ViewPager和Tabhost结合,可滑动的tabhost
- 金蝶k3数据库服务器信息,金蝶k3如何查询连接的服务器配置
- DIY01_NE555叮咚门铃
- 关于Windows-Linux双系统的启动引导
- “西游记之大圣归来”短评主题分析-Latent Dirichlet Allocation
- MATLAB App Designer 计算器的设计
- 个推数说中国42年冬奥史,可视化演绎冰雪奇缘