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
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348687
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130303

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

    IGBT模块损坏时,什么情况导致短路?什么情况导致开路?

    IGBT模块损坏时,什么情况导致短路?什么情况导致开路?  IGBT模块是一种功率模块,用于高功率电子设备控制。当IGBT模块在使用过程中遭受损坏时,可能会出现短路或开路的问题。这两种情况会对电路
    的头像 发表于 10-19 17:08 3210次阅读

    STM32的systick定时器什么情况下才会不工作?

    STM32的systick定时器什么情况下才会不工作
    发表于 09-22 07:57

    stm32的看门狗在什么情况下会失效

    stm32的看门狗在什么情况下会失效
    发表于 09-22 07:24

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

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

    应急灯什么情况下才会亮?

    应急灯什么情况下才会亮? 应急灯指的是电源发生故障时,正常照明无法使用的情况下,启动的照明灯。比如说因为火灾导致正常照明系统失效时,消防疏散照明灯、消防应急照明灯会自动亮起,起到疏散人群,提供照明
    的头像 发表于 07-25 13:57 7556次阅读

    电机什么情况下需要配减速机呢

    电机是运动机械的最常用动力源,今天分享什么情况下电机需要配减速机。
    的头像 发表于 07-21 17:31 756次阅读
    电机<b class='flag-5'>什么情况</b>下需要配减速机呢

    电机什么情况下需要配减速机?

    电机是运动机械的最常用动力源,今天分享什么情况下电机需要配减速机。
    的头像 发表于 05-26 17:47 1243次阅读
    电机<b class='flag-5'>什么情况</b>下需要配减速机?

    STM32L431 PA0唤醒不断重启这是什么情况

    (); 这两个函数是可以让PA0待机时保持上拉,即使待机重启也能保持 实际测试时,进入待机PA0接到低电平保持住低电平,stm32就无限重启,像是低电平唤醒,但是应该下降沿只唤醒一次啊。 修改即使按官方的例程库修改一下k
    发表于 05-17 11:33

    什么情况下信号量断言会失效呢?

    , line); }}看一下打印信息里的参数,提示是下面函数的断言失效,问题一:在什么情况下,一个信号量的类型不是信号量呢? rt_err_t rt_sem_release(rt_sem_t sem
    发表于 05-11 14:35