找回密码
 注册
查看: 257|回复: 2
打印 上一主题 下一主题

STM32的外部振荡器失效怎么解决?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-1-14 13:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
原因0 I: f- f) D, [( _2 |2 h9 x( J* O
     在实际应用中,经常出现由于晶体振荡器在运行中失去 作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。严重时,由于系统的死机造成监控失效, 导致无法挽回的损失!
* |9 @' |8 F- J" f  目的
, S: ^! D, u! l; r" O0 b% Q      STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE) 失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。
% q$ q2 {% b5 X( i# a5 G  原理
' Y# y. f# Z2 w2 L  F      时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如 果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,此中断被连接到Cortex-M3的NMI的中断;与此同时CSS将内部RC振荡器切换为STM32的系统时钟源。( 对于STM32F103 ,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)
9 [& _% B7 D/ p" o. a4 c2 {

- P* R' B6 R3 x% \0 y. @; s; f1 J 注意, J5 i# q9 Z/ b7 N+ k
      一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR) 里的CSSC 位来清除CSS中断。
8 S: j2 b& S8 @* p& }5 F  
/ q) O' S& ^! ]! Y! O6 X应用
3 u) x; C. B) `: I4 W& Y  ^
& @, E$ b  J3 W% v0 }- o; ^" l9 S+ X! s3 A4 ]( ?" O
1、启动时钟安全系统CSS:- x$ A" X5 w$ ^, p5 p! T

% P1 M% \, ]: ]9 R
8 V0 n, ]2 C0 @/ g( R' }4 ?$ ~RCC_ClockSecuritySystEMCmd(ENABLE);     // (NMI 中断是不可屏蔽的!)+ m/ p% t4 c9 v/ N8 P3 \9 L
2、外部振荡器实现时,产生中断,对应的中断程序:$ j3 g. [; D' }
: M2 x% I* L/ e, u

# S+ E8 c( Z* l+ Jvoid NMIException(void)9 B- Q1 T- Q; _( M, e
{$ o7 M6 L1 V6 S7 z" N( o* ~
     if (RCC_GetITStatus(RCC_IT_CSS) != RESET)$ t, B! S) L* G# i5 O* U
     {    // HSE、PLL 已被禁止(但是PLL 设置未变)* X( H* M8 _6 S7 k# Z
          /* …… */ // 客户添加相应的系统保护代码处+ p" Y: K" N- D6 F. l
        // 下面为HSE恢复后的预设置代码
+ `2 h' `# y4 }) ]" @$ W       RCC_HSEConfig(RCC_HSE_ON);  // 使能HSE
3 @2 v3 Z* k: O' P, N7 y        RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断
* F* k- A% {4 N6 G+ f9 B: i       RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就绪中断9 }9 b* n+ ]3 M) p5 Q% a; T
       RCC_ClearITPendingBit(RCC_IT_CSS );  // 清除时钟安全系统中断的挂起位
; A9 d5 O* W8 m1 B6 M0 L  ]& b" B9 x0 k: c
       // 至此,一旦HSE时钟恢复,将发生HSERDY中断,* W: c  F5 X9 K6 y
% K7 k0 a4 ~+ @, h4 ~5 Y; K
       //在RCC中断处理程序里, 系统时钟可以设置到以前的状态
# M8 N$ Y- |9 E' W2 w    }' {" s* T3 Q1 t) c3 s6 ]: E4 P6 q% z
}
$ p5 m2 j, ]$ o2 T7 H, N3、在RCC的中断处理程序中,再对HSE和PLL 进行相应的处理。

" x' X1 [7 R# x( p5 x( M

该用户从未签到

2#
发表于 2022-1-14 14:30 | 只看该作者
CSS被激活HSE时钟出现故障自动产生 NMI,感谢分享

该用户从未签到

3#
发表于 2022-2-28 17:27 | 只看该作者
晶体振荡器失去作用导致
; `: y; i8 }: G# y( b0 T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-1 15:03 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表