打印

时钟安全系统的疑问

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

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

再看看你的程序中是如何处理的,尤其是NMI的处理。

使用特权

评论回复
板凳
zq1987731|  楼主 | 2009-4-5 10:00 | 只看该作者

疑惑的地方主要是:

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

使用特权

评论回复
地板
香水城| | 2009-4-5 10:54 | 只看该作者

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

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

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

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

使用特权

评论回复
5
zq1987731|  楼主 | 2009-4-5 16:56 | 只看该作者

回香版

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

然后由于目前做的这个设备是工业级设备,“告知”外部时钟出事确实很重要,看来是我的表达能力欠缺...其实要问的仅仅是上面那个问题,下面的纯粹为画蛇添足..

使用特权

评论回复
6
香水城| | 2009-4-5 18:04 | 只看该作者

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

如果你也认为“告知”外部时钟出事确实很重要,那么这个问题的答案就不重要了,你认为如何?

使用特权

评论回复
7
zq1987731|  楼主 | 2009-4-5 20:45 | 只看该作者

...

期待早日知道答案...后面那个问题是不重要了(另外没这功能才头痛呢,岂不是要专门设置个任务一直检测外部时钟的运行状况- -..........)

使用特权

评论回复
8
香水城| | 2009-4-5 21:25 | 只看该作者

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

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

STM32设置的这个时钟安全系统(CSS)是不能通过任何软件或外部电路实现的。

使用特权

评论回复
9
zq1987731|  楼主 | 2009-4-5 23:34 | 只看该作者

对一般MCU而言是这样没错

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

使用特权

评论回复
10
ST_ARM| | 2009-4-7 10:12 | 只看该作者

关于CSS的应用

外部时钟出错时,系统自动切换到内部HSI为Cortex-M3提供时钟,同时系统仍在不停地检测外部时钟是否处于稳定状态,一旦检测到外部时钟稳定后,此时如果你的HSERDYIE位使能,将产生中断,用户可在对应的中断处理函数中再次使能HSE,并且重新配置PLL。

这个流程一般属于用户的程序开发思路,在ST的软件库里的例程中有这样一个例子,你可以去看看。

RCC Example
Configure the system clock source, AHB, APB2 and APB1 prescaler. It demonstrates also the Clock Security System (CSS) which handles the High Speed External clock (HSE) failure detection and system clock back-up. 

使用特权

评论回复
11
zq1987731|  楼主 | 2009-4-7 20:08 | 只看该作者

...

才知道ST的库是有相关例程的...之前还以为就一份pdf说明书呢,现在总算弄明白了,谢谢!

使用特权

评论回复
12
香水城| | 2010-11-11 08:45 | 只看该作者
我也做楼主类似的试验,问题是发现:直接使用HSE为系统时钟时,HSE故障不能自动切换到HSI;使用PLL的输出为系统时钟时,HSE故障时可以自动切换到HSI
幽蓝 发表于 2010-11-11 00:25


你做的是什么试验?什么芯片?

使用特权

评论回复
13
幽蓝| | 2010-11-11 09:32 | 只看该作者
用超值版demo做实验(discovery例程),stm32 100RB。在system_stm32f10x.c文件中,如果
#define SYSCLK_FREQ_24MHz  24000000 时,此时是PLL输出做系统时钟,mcu启动后拔出外部晶振,使得HSE失效,LED指示灯闪烁变慢,可以认为是从24MHz切换到8MHz的HSI上了,插入外部晶振,恢复了HSE,LED指示灯闪烁速度又正常了,可以认为是系统时钟从HSI又恢复到PLL的24MHz了,故障切换没问题;如果#define SYSCLK_FREQ_HSE    HSE_Value 时,此时是HSE为系统时钟,重复上述实验,当拔掉晶振时,LED就停掉了,恢复晶振,也不能再正常闪烁了,故认为没能自动切换,而且好像core都停止工作了,因为KEIL有弹出提示。

使用特权

评论回复
14
香水城| | 2010-11-11 10:02 | 只看该作者
请你直接检查一下各个寄存器的设置是否正确,如果寄存器的设置错误,则说明库函数的使用不当,或库的版本不匹配;如果寄存器的设置,就有可能见鬼了。

使用特权

评论回复
15
幽蓝| | 2010-11-11 11:53 | 只看该作者
使用的是AN3268 例程包, 自带库是3.3版本。检查了两种定义下的rcc寄存器设置,没看出什么不妥;并且将系统时钟通过PA8送到示波器上看,第二种情况时,输出8MHz的信号变成了高电平,确实没切换到HSI上;在第一种情况时,24MHz会变成3.6MHZ,是切换了。怀疑STM的时钟安全检测,只是监视了PLL的输出,而没有顾及HSE,当PLL作为系统时钟时,时钟安全检测会在HSE出问题时切换到HSI,HSE不经PLL直接作为系统时钟时,时钟安全检测有BUG,不能自动切换到HSI。stm32F103ZE的开发板也是同样×(已经实验过)

使用特权

评论回复
16
香水城| | 2010-11-11 11:58 | 只看该作者
把你的测试程序贴上来。

另外,你最好重开帖。

使用特权

评论回复
17
无冕之王| | 2010-11-11 14:48 | 只看该作者
也曾有过研究单片机时钟安全系统的念头,楼主的研究方法值得学习

使用特权

评论回复
18
幽蓝| | 2010-11-11 15:31 | 只看该作者
终于思考明白了,没有启用css时,不会在HSE和HSI间切换,当HSE失效时,是PLL的最低频率在起作用,恢复HSE后PLL输出又正常了,所以就出现了我实验的第一种情况。也是楼主说的那个现象。累死好多脑细胞!

使用特权

评论回复
19
xlsbz| | 2014-11-8 11:09 | 只看该作者
mark好贴

使用特权

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

本版积分规则

95

主题

759

帖子

3

粉丝