|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
原因
+ L* h0 F4 H% y$ F# {; u! E V 在实际应用中,经常出现由于晶体振荡器在运行中失去 作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。严重时,由于系统的死机造成监控失效, 导致无法挽回的损失!
: x3 I( g: z* f2 _( f5 S& K. e 目的 7 j; d2 p' A1 L! X! q9 H1 E% p
STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE) 失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。; v8 e# v4 v. f
原理# I- s: q, D, h% k3 j
时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如 果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,此中断被连接到Cortex-M3的NMI的中断;与此同时CSS将内部RC振荡器切换为STM32的系统时钟源。( 对于STM32F103 ,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)2 s; ~. L1 j5 |8 n
1 P- Y3 c" k& L
注意
/ n* P4 n% c4 T8 D5 H 一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR) 里的CSSC 位来清除CSS中断。
; ^# X9 P, ^- x) J5 N# x
# y) _! K4 t$ ]应用
$ u# \/ ]* }6 k9 I* y. s6 s$ ~, g1 J' A4 \- }3 c
6 i2 o9 g6 m1 Q8 p1、启动时钟安全系统CSS:
. q% K+ P3 s4 F$ F: E
0 k( o/ m. ?/ y$ ^5 b1 @
) g! ^! d1 p7 D0 Y# ?RCC_ClockSecuritySystEMCmd(ENABLE); // (NMI 中断是不可屏蔽的!)
3 n' b7 V7 b2 V; U2、外部振荡器实现时,产生中断,对应的中断程序:, K% E' | a& Q+ H
' K, `8 J; h9 X* U# G' y
/ w! `8 |" s7 R3 G: Jvoid NMIException(void)
& _: S' f7 X- C5 V1 a {4 L: }. D# ^. Z9 O) }5 {( O
if (RCC_GetITStatus(RCC_IT_CSS) != RESET)
: w7 x7 {0 p) D3 B1 A% B { // HSE、PLL 已被禁止(但是PLL 设置未变)
5 {. s& h9 J# f, J9 z /* …… */ // 客户添加相应的系统保护代码处
7 }7 F* G( [/ Z( p* t // 下面为HSE恢复后的预设置代码
% s% A3 E# a8 }' A RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
6 z5 Z. B- B' W" K% m( f; f RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断7 m6 f9 l/ N. [+ I( y
RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就绪中断
6 @' L1 H) h* d. F2 O# ^. @ RCC_ClearITPendingBit(RCC_IT_CSS ); // 清除时钟安全系统中断的挂起位
" L/ A/ {- M1 X* j* B
& I" t9 a' i8 L // 至此,一旦HSE时钟恢复,将发生HSERDY中断,
( E8 n y$ V& L9 P$ S. H n# a5 d( t1 D) r: {) E0 \3 N6 f: K
//在RCC中断处理程序里, 系统时钟可以设置到以前的状态 * S1 {$ U) n- Z& S; g: P+ t7 [
}
- K, z8 s3 w7 e0 ] } T+ D F# O6 b" d/ L: O
3、在RCC的中断处理程序中,再对HSE和PLL 进行相应的处理。
5 Q' {, o* u" T6 y |
|