STM32 时钟失效之后,还能继续运行
原文中文,约1900字,阅读约需5分钟。
📝
内容提要
该文章讲述了STM32F103VDT6芯片的可靠性问题,通过调研发现PLL在没有输入信号的情况下仍能维持在最低频点处振荡,导致无法通过判断有无时钟来判断HSE是否失效。为解决此问题,建议使用CSS功能来检测和处理HSE失效。
🎯
关键要点
-
STM32F103VDT6芯片在HSE失效时仍能维持PLL振荡,导致无法判断HSE是否失效。
-
客户的产品设计中使用8MHz晶体和72MHz PLL作为系统时钟,外接看门狗监控状态。
-
可靠性测试中,HSE停止振荡时看门狗未能复位STM32,进一步测试确认STM32仍发送复位脉冲。
-
调研中发现STM32未开启CSS功能,修改代码以便观察PLL输出频率。
-
PLL在输入信号频率过低时可能失锁,输出频率不一定为零,无法通过时钟判断HSE状态。
-
建议在软件中开启CSS功能,修改NMI中断服务程序以处理HSE失效。
-
CSS功能可在HSE失效时自动切换到HSI并产生NMI中断,防止看门狗复位。
-
用户程序可在NMI中断服务程序中尝试恢复HSE及PLL功能,或等待看门狗复位系统。
❓
延伸问答
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状态。
🏷️