EDA365电子论坛网
标题:
STM32的外部振荡器失效怎么解决?
[打印本页]
作者:
House647
时间:
2022-1-14 13:50
标题:
STM32的外部振荡器失效怎么解决?
原因
5 A* R! b' W6 G; z& c) E5 [1 `. D
在实际应用中,经常出现由于晶体振荡器在运行中失去 作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。严重时,由于系统的死机造成监控失效, 导致无法挽回的损失!
4 ~) t6 ~; k5 L4 G
目的
( r% f+ k2 Y. U8 j: r9 O
STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE) 失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。
& Z N& g6 n5 s$ g
原理
1 ] k9 v# F- w' u4 h5 C c; H4 h
时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如 果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,此中断被连接到Cortex-M3的NMI的中断;与此同时CSS将内部RC振荡器切换为STM32的系统时钟源。( 对于STM32F103 ,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)
& D! g$ D" p/ F- Y$ l& b/ B$ P
poYBAGD-5oyAHgneAADDVrHEMgo120.png
(49.41 KB, 下载次数: 4)
下载附件
保存到相册
2022-1-14 13:50 上传
8 v+ e2 ]3 X* W) c$ V
注意
# K/ m7 j& T2 N% E+ |
一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR) 里的CSSC 位来清除CSS中断。
2 t! E: V! G( @: G4 k \! H. E. [+ ]
* {# v2 K. B8 V A: Y9 k( n
应用
2 v; ~7 y& E) ~
: t/ a2 p' T: f" h5 x
. n6 o5 R" Q$ S- f( E: i
1、启动时钟安全系统CSS:
6 w1 l. N/ e' k+ l+ p! G* B3 f
% U7 O) w C) a2 W3 H7 j& O# {
, }5 O; K0 |& x$ _1 F
RCC_ClockSecuritySystemCmd(ENABLE); // (NMI 中断是不可屏蔽的!)
8 v/ ?* O( g M" F6 s2 A
2、外部振荡器实现时,产生中断,对应的中断程序:
0 t. m2 K& j4 R; D+ e
# Z3 A% ? @; o. t( ]4 Q) x
6 x4 Y2 h3 d V1 A4 ^
void NMIException(void)
3 m+ ]* i+ j# r2 W; h, y# F3 y
{
/ }, ^7 u* m \
if (RCC_GetITStatus(RCC_IT_CSS) != RESET)
$ n/ k/ j+ b( b4 v; | V0 {3 _
{ // HSE、PLL 已被禁止(但是PLL 设置未变)
' T( j# ?: h1 y# L
/* …… */ // 客户添加相应的系统保护代码处
* T9 f3 I3 p& q2 h' K+ M1 x5 @
// 下面为HSE恢复后的预设置代码
! C6 g1 l; x0 N3 Q& \
RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
1 Z$ e7 j$ v* [8 N1 ~1 E( A) D! K0 ?
RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断
" g7 z# v8 P! F! p
RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就绪中断
2 v: O8 j3 r! }: p
RCC_ClearITPendingBit(RCC_IT_CSS ); // 清除时钟安全系统中断的挂起位
) O' }: o. g) P6 [! I, }
& N5 V& C! e5 N' y; f6 q
// 至此,一旦HSE时钟恢复,将发生HSERDY中断,
/ y0 m: W8 w- z# Q0 y1 Z% p9 w
. t T/ L( ]" _6 I; U: a
//在RCC中断处理程序里, 系统时钟可以设置到以前的状态
+ ^- \6 |( ]- h! m5 q) ]! P* m6 B
}
! `3 N- u: c8 _4 p. u" M
}
( _7 f$ P) [7 f) ^& J% q% c
3、在RCC的中断处理程序中,再对HSE和PLL 进行相应的处理。
- w+ H) Q h& p6 t
作者:
gift325
时间:
2022-1-14 14:30
CSS被激活HSE时钟出现故障自动产生 NMI,感谢分享
作者:
opipo
时间:
2022-2-28 17:27
晶体振荡器失去作用导致
; H& r( ~- z) s# }
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2