STM32的安全技术---RVD电源检测和CSS时钟切换

2019-07-13 23:48发布

RVD电源检测STM32: 这个firmware有demo。并且我试验了,可以用。不过官网V3.5.0的demo有笔误。   EXTI_ClearITPendingBit(EXTI_Line16);          //官网写的是Line17
  EXTI_InitStructure.EXTI_Line = EXTI_Line16;//官网写的是Line17

CSS时钟切换:
这个21IC有帖子:

时钟安全系统的疑问 [复制链接]   此帖已结(0)


 zq1987731 发表于 2009-4-5 02:40:00 |只看该作者 |倒序浏览 回复 |返回版面 芯片型号:STM32F103ZET6
情况:最近闲的无聊想看看STM32的时钟安全系统是怎么回事,所以将外部晶体作为时钟,PLL后到72M,然后软件中对“时钟安全系统”没有任何的操作,仅仅写了一个LED流水灯程序,接着用导线短接晶振两脚,那么它死活都该出问题了,结果~~LED流水灯继续转(不是重新开始,而是接着之前的状态继续下去),但是速度明显变慢很多,应该是自动切换到内部RC振荡器了,放开短接的晶振脚后自动恢复到之前的速度,再短接又变慢,不短接就正常,感觉相当奇怪:
(1)我在软件中没有作任何处理,STM32是否本身就有这类机制,也就是外部时钟失效后自动切换到内部,同时外部时钟一旦恢复正常就切换回去?
(2)如果(1)成立,那么要“时钟安全系统”何用?我本来的目的就是外部时钟失效时通过它重新启动外部晶振,既然这一切是自动的,这系统的作用岂不多余?
(3)我的测试程序仅仅是点亮LED1,然后用CPU空转的方式等待,接着关闭LED1同时打开LED2……如此下去,不知道有没有我没观察到的“异常”存在,就好比以前用51时主程序中不用while(1),那么程序走完一遍后仍然会从0地址开始,“看上去”就像在无限循环,实际上相当于走完一个循环重启一次。

请看看手册上对时钟安全系统的说明

再看看你的程序中是如何处理的,尤其是NMI的处理。  zq1987731 发表于 2009-4-5 10:00:00 |只看该作者 点评回复 |返回版面

疑惑的地方主要是:

图中倒数第三行,“时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。”
    我个人理解:外部时钟出事了,自动切换到内部HSI,这里没多大问题,但是切换了以后从现象上来看,系统是在尝试重新启动外部时钟的,一旦启动成功就自动切换回去并且重新打开PLL,这点资料上提都没提。
    那么“时钟安全系统”的存在不就仅仅是“告知”外部时钟出事,并对TIM1等等作个补救么?如果在软件上不作任何处理(即CSSI中断为关闭状态,NMI处理函数自然也是空的),系统一样可以从故障中恢复过来。并且在故障发生及自动恢复期间,时钟均由HSI提供,并不会有“死机”现象出现,而这一切是我发帖中提到的那个小实验中观察到的,同时也是疑惑的地方。
    那么..以上假设是否成立呢?毕竟资料上提都没提,害怕属于非法应用..

你是否要问:当HSE恢复之后,CSS是否应该自动切换回使用HSE

首先,请你确认我的理解是否正确:你是否要问:当HSE恢复之后,CSS是否应该自动切换回使用HSE?这个问题确实没有在手册中提及,我要问了设计人员之后才知道。

其次,“告知”外部时钟出事是一个非常重要的事情,你自己做个小试验可以不去处理这个事件,但是在很多应用场合,必须要处理这个事件,即使它有可能会自动恢复。

在HSE失效时,HSI可以提供时钟,但这个时钟的主要目的不是为了维持正常的操作,HSI只能维持最低限度的运行(系统时钟频率降低),而是为了让你可以进行紧急处理。比如一个抢救病人的呼吸机,如果主时钟失效,软件必须依靠HSI做紧急处理并立刻报警,提醒值班医生,否则病人将会有生命危险。这种情况下你能够企望HSE自动恢复吗?多长时间能够自动恢复?即使它自动恢复了,在没有查明HSE失效的原因之前,你还敢再继续使用这台呼吸机吗?

回香版

首先,我的问题确实如此:当HSE恢复之后,CSS是否应该自动切换回使用HSE?

然后由于目前做的这个设备是工业级设备,“告知”外部时钟出事确实很重要,看来是我的表达能力欠缺...其实要问的仅仅是上面那个问题,下面的纯粹为画蛇添足..
 香水城 发表于 2009-4-5 18:04:00 |只看该作者 点评回复 |返回版面

我要问了设计人员之后才能回答5楼的问题

如果你也认为“告知”外部时钟出事确实很重要,那么这个问题的答案就不重要了,你认为如何?  zq1987731 发表于 2009-4-5 20:45:00 |只看该作者 点评回复 |返回版面

...

期待早日知道答案...后面那个问题是不重要了(另外没这功能才头痛呢,岂不是要专门设置个任务一直检测外部时钟的运行状况- -..........)  香水城 发表于 2009-4-5 21:25:00 |只看该作者 点评回复 |返回版面

不可能通过软件方法检测外部时钟的运行状况

这是因为外部时钟失效时,CPU根本无法运行,如何还能执行什么任务呢?

STM32设置的这个时钟安全系统(CSS)是不能通过任何软件或外部电路实现的。
 zq1987731 发表于 2009-4-5 23:34:00 |只看该作者 点评回复 |返回版面

对一般MCU而言是这样没错

    但我所谓的“检测”是建立在STM32能自动从外部时钟故障时“切换”到内部时而言的,再次引用“时钟故障将导致系统时钟【自动】切换到HSI振荡器,同时外部HSE振荡器被关闭。”
    本人所指“专门设置个任务一直检测外部时钟的运行状况”即定时检测MCU时钟频率的小任务而已。
    题外话:STM32的抗干扰能力果然强悍,电源线上用±4KV、5K重复率、1MHz的脉冲群随便打都没死机现象,除非短接晶振脚,不然让其在“自然”情况下出事还真有一定难度..