打印
[STM32F1]

时钟失效后 CPU 还会运行

[复制链接]
784|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LEDyyds|  楼主 | 2021-11-3 14:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
问题发生在 STM32F103VDT6 器件上。据其工程师讲述:在其产品的设计中, STM32 的 HSE 外接 8MHz
的晶体产生振荡,然后通过 STM32 内部的 PLL 倍频到 72MHz,作为 STM32 的系统时钟,驱动芯片工作。在 STM32 片外
有专用的看门狗芯片,监控 STM32 的运行。 STM32 内部的软件会在 STM32 的某个管脚上产生脉冲来复位看门狗。一旦
STM32 没有及时的产生脉冲来复位门狗,则看门狗会认为 STM32 运行不正常,从而复位 STM32。在对该产品做可靠性测试
时,进行了对看门狗监控时钟失效能力的测试。测试的方法是:将 HSE 外接的晶体的两个端子接地,使其停止振荡,从而验
证看门狗能否做出对 STM32 的做出复位动作。试验结果表明,看门狗没有产生复位动作。进一步测试发现, STM32 在失效
情况下仍在向看门狗发送复位脉冲。  

使用特权

评论回复
沙发
LEDyyds|  楼主 | 2021-11-3 14:37 | 只看该作者
重复测试,确认其所述现象属实。检查软件代码,确认其软件没有开启 STM32 的 CSS 功能。修改代码,将 PLL 的二分频从
STM32 的 MCO 管脚送出,以方便用示波器观察。通过控制晶体的管脚是否接地来控制 HSE 是否振荡。当 HSE 正常振荡时,
MCO 送出的信号频率为 36MHz,当 HSE 停止振荡时, MCO 送出的信号的频率在 1.7MHz 附近,如图(一)所示:  



使用特权

评论回复
板凳
LEDyyds|  楼主 | 2021-11-3 14:38 | 只看该作者
通过调试器观察寄存器 RCC_CFGR 中的 SWS 控制控制位,其值为[10],说明此时的系统
时钟确实来自 PLL 的输出。
从 STM32F103VD 的数据手册中查找 PLL 相关的参数如表(一):

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


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


使用特权

评论回复
地板
LEDyyds|  楼主 | 2021-11-3 14:38 | 只看该作者
结论:
STM32 的 PLL 在没有输入信号的情况下,仍能维持在最低的频点处振荡,产生输出。以至, CPU 及其它外设仍能在 PLL 送
出的时钟的驱动下运行。所以,通过判断有无时钟来驱动 CPU 执行指令的方式来判断 HSE 是否失效是行不通的。
处理:
对软件做如下修改:
1. 在软件的初始化部分,开启 STM32 的 CSS 功能;
2. 修改 NMI 中断服务程序,加入 while(1) 陷阱语句;
开启 CSS 功能后,当 HSE 失效时, STM32 会自动开启 HSI,并将系统时钟的来源切换到 HSI 的输出,同时产生 NMI 中断。
这样,程序的流程将停留在 NMI 中而不能产生复位片外的看门狗的脉冲。当片外看门狗溢出后,就会复位 STM32,使其恢复
到正常驻的状。  

使用特权

评论回复
5
LEDyyds|  楼主 | 2021-11-3 14:39 | 只看该作者
建议:
STM32 中的 CSS 功能是专门为检测和处理 HSE 失效而设计的。但该功能在 STM32 复位后是被禁止的,须要软件对其使能
才会发挥作用。当 CSS 单元检测到 HSE 失效时,它会使能 HSI,并将系统时钟切换到 HSI。同时,它会关闭 HSE,如果 PLL
的输入信号来自 HSE 的输出,它也会关闭 PLL。 CSS 单元在做时钟调整的同时,也会产生一个 NMI 中断请求,和一个送给
高级定时器的刹车信号。 NMI 中断请求会产生一个 NMI 中断,以便用户程序可以在中断服务程序中做紧急处理,而刹车信号
则是使高级定时器进入刹车状态,以防止由其控制的电机驱动桥臂由于失去控制而过流。用户程序可以在 NMI 中断服务程序
中尝试恢复 HSE 及 PLL 的功能,也可以使用陷阱让程序的流程停留在服务程序中,从而等待看门狗复位整个系统  

使用特权

评论回复
6
littlelida| | 2021-11-3 16:54 | 只看该作者
主要是说Css功能吧?
楼主的这个测试,感觉挺不错的~~

使用特权

评论回复
7
sonicll| | 2021-11-3 17:53 | 只看该作者
那意思是说,如果不开启CSS功能,当HSE失效时,STM32不会把时钟切换到HSI是吧,想要自动切换就必须要开启CSS

使用特权

评论回复
8
Allison8859| | 2021-11-3 22:09 | 只看该作者
请问,HSE怎么会失效呢?是因为元件劣质么?

使用特权

评论回复
9
yangjiaxu| | 2021-11-3 22:11 | 只看该作者
HSE失效的时候,好像不会自动开HSI,得重启

使用特权

评论回复
10
alxd| | 2021-11-3 22:12 | 只看该作者
ST时钟这块我都是默认的,没遇到过HSE失效的情况

使用特权

评论回复
11
Estelle1999| | 2021-11-3 22:13 | 只看该作者
楼主是做什么产品的啊,感觉对时钟方面很严格

使用特权

评论回复
12
Emily999| | 2021-11-3 22:14 | 只看该作者
楼主这个建议真的很好,稳

使用特权

评论回复
13
Charlotte夏| | 2021-11-3 22:16 | 只看该作者
CCS真是个时钟安全系统,对硬件系统要求高的时候,属实得使用这样

使用特权

评论回复
14
Charlene沙| | 2021-11-3 22:16 | 只看该作者
按楼主逻辑来说,是不是开启CCS功能就好了呀

使用特权

评论回复
15
Carmen7| | 2021-11-3 22:17 | 只看该作者
像我做的产品 好像都不需要这么高要求,不过通过楼主的科普也找到了一个好的解决方法,保证系统可以正常运行

使用特权

评论回复
16
Carina卡| | 2021-11-3 22:18 | 只看该作者
你这是用ST的MCU做汽车电子么?

使用特权

评论回复
17
Candic12e| | 2021-11-3 22:19 | 只看该作者
ST好像抗干扰性还差一点儿,没有专业做汽车电子的MCU稳定

使用特权

评论回复
18
Betty996| | 2021-11-3 22:20 | 只看该作者
CCS这个功能真的挺好的

使用特权

评论回复
19
Betty1299| | 2021-11-3 22:21 | 只看该作者
这个测试挺好的,学习到了,之前都没考虑过这么细致

使用特权

评论回复
20
Belle1257| | 2021-11-3 22:21 | 只看该作者
这个是对硬件系统的时钟要求非常高的时候,才会考虑吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

546

帖子

1

粉丝