咿呀咿呀哟rui 发表于 2022-11-3 10:14

时钟安全机制

1.1    HSE时钟安全系统(CLKSS)实际应用中可能会出现由于晶体振荡器失去作用而导致系统出错的情况,时钟安全系统用于监控外部时钟是否失效。时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CLKSSIF,允许软件完成营救操作。此CLKSSIF中断连接到Cortex™-M4F的NMI中断(不可屏蔽中断)。一旦CLKSS被激活,并且HSE时钟出现故障,CLKSS中断就产生,并且NMI也自动产生。NMI将被不断执行,直到CLKSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CLKINT)里的CLKSSICLR位来清除CLKSS中断。如果HSE振荡器被直接或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟,PLL也将被关闭。1.2    LSE时钟安全系统(LSECLKSS)目前通用MCU中支持LSE时钟安全系统的系列有N32G430、N32G432、N32G435、N32L40x、N32L43x。通过使能低功耗域控制寄存器(RCC_LDCTRL) 的 LSECLKSSEN 位, 来激活 LSE 时钟安全系统。 硬件复位或者 RTC 软件复位或者检测到 LSE 故障后可以清除 LSECLKSSEN 位。当 LSE 和 LSI 使能并就绪,在配置 RTCSEL 选择 RTC 时钟源后必须使能 LSECLKSSEN 位。如果检测到 LSE 故障,则不会再向 RTC 提供 LSE,但硬件不会修改 RTCSEL 位来切换 RTC 时钟源。在 Standby 模式下, LSE 时钟故障会触发唤醒。在其他模式下可以产生中断来唤醒,再由软件清除
LSECLKSSEN 位并关闭 LSE,并更改 RTC 的时钟源等其他措施来确保应用的安全。LSE 振荡器的频率必须高于 30KHz, 以免发生 LSESS 误检。1.3       HSE时钟安全机制代码1、打开SDK中的RCC例程,保留使能时钟安全功能和NVIC中断函数,删掉main中其他内容,根据需求设置时钟频率(不能超过128MHz),如下图所示。在循环执行任意功能函数,用以观察程序正常运行https://bbs.21ic.com/forum.php?mod=image&aid=2011444&size=300x300&key=e43cd66b6092e44e&nocache=yes&type=fixnone由于时钟失效事件会被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CLKSSIF,而此CLKSSIF中断连接到Cortex™-M4F的NMI中断,所以我们要在NMI中断中处理时钟源更换这个事件。 2、屏蔽原有重新使能HSE时钟部分,设置时钟源为HSI,通过PLL时钟配置主频大小,最后清除CLKSSIF中断标志位即可正常运行系统。https://bbs.21ic.com/forum.php?mod=image&aid=2011446&size=300x300&key=292e4573813e8cc6&nocache=yes&type=fixnone                              3、编译并下载进开发板,打开串口助手,复位并运行代码,然后短接晶振使其失效,可看到如下图打印,sysclkSrc is HSI,表明时钟安全机制已启动,HSE失效时系统时钟源已更改到HIS时钟源上。https://bbs.21ic.com/forum.php?mod=image&aid=2011450&size=300x300&key=4551818adbd8fbd6&nocache=yes&type=fixnone

V853 发表于 2022-11-5 09:49

还没注意到过这种事,没有考虑时钟还有安全这回事。

朝生 发表于 2022-11-5 09:50

什么情况需要测试时钟安全?从来没测试过。

ykwym 发表于 2022-11-11 11:34

开了时钟安全功能,晶振就会异常敏感,手放到晶振上去就进中断了。。。
页: [1]
查看完整版本: 时钟安全机制