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

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

该文章讲述了STM32F103VDT6芯片的可靠性问题,通过调研发现PLL在没有输入信号的情况下仍能维持在最低频点处振荡,导致无法通过判断有无时钟来判断HSE是否失效。为解决此问题,建议使用CSS功能来检测和处理HSE失效。

🔎

延伸解读

PLL失锁时的非零输出特性

文章实测发现,当HSE停止振荡时,PLL输出并非为零,而是维持在约1.7MHz的最低频点。数据手册标明PLL锁定输出范围为16MHz–72MHz,低于此范围可能失锁,输出频率与输入不再满足设定倍频关系。因此,不能简单认为输入为零则输出为零,依赖时钟有无判断HSE状态会失效。

CSS功能的工作机制与默认状态

STM32的CSS单元专为检测HSE失效设计,但复位后默认关闭,需软件使能。一旦检测到HSE失效,CSS会自动开启HSI并将系统时钟切换至HSI,同时关闭HSE和PLL(若PLL输入来自HSE),并产生NMI中断和高级定时器刹车信号,以防止电机驱动桥臂过流。

软件处理策略:陷阱与看门狗配合

文章建议在初始化中开启CSS,并在NMI中断服务程序中加入while(1)陷阱。这样HSE失效时,程序停留在NMI中,不再产生复位外部看门狗的脉冲,看门狗溢出后复位STM32,使其恢复正常。用户也可在NMI中尝试恢复HSE及PLL,或等待看门狗复位。

❓

Q&A

STM32F103VDT6芯片在HSE失效时会发生什么情况?

在HSE失效时,STM32F103VDT6芯片的PLL仍能维持最低频点振荡,导致无法通过时钟判断HSE是否失效。

如何检测STM32的HSE失效?

建议在软件中开启CSS功能,修改NMI中断服务程序以处理HSE失效。

CSS功能在STM32中有什么作用?

CSS功能用于检测HSE失效,能够自动切换到HSI并产生NMI中断,防止看门狗复位。

为什么看门狗未能复位STM32?

因为在HSE失效时,STM32仍然向看门狗发送复位脉冲,导致看门狗未能判断异常并复位。

如何修改STM32的代码以处理HSE失效?

需要在初始化部分开启CSS功能,并在NMI中断服务程序中加入陷阱语句。

PLL在输入信号频率过低时会出现什么情况?

当输入信号频率过低时,PLL可能失锁,输出频率不一定为零,无法通过时钟判断HSE状态。

🏷️

标签

➡️

继续阅读