找回密码
 注册
关于网站域名变更的通知
查看: 343|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
原因4 `/ y5 F/ i4 v* z& F; S" ~( S
     在实际应用中,经常出现由于晶体振荡器在运行中失去 作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。严重时,由于系统的死机造成监控失效, 导致无法挽回的损失!# u8 q/ \2 u) K6 f* n* ?
  目的 & g4 E5 Y; d) S; C# N
      STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE) 失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。, D, a/ e" l- s3 J; N6 C2 ~
  原理# ]2 G, N- ~9 \9 n" w
      时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如 果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,此中断被连接到Cortex-M3的NMI的中断;与此同时CSS将内部RC振荡器切换为STM32的系统时钟源。( 对于STM32F103 ,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)
* W; f! S0 A- v9 v. x% x
" z. g" O* U, h
注意
' g9 w3 o0 F1 }/ _3 F% R) b      一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR) 里的CSSC 位来清除CSS中断。
$ }( k0 j! z3 {1 W' R8 g  
) p( {( Q3 O# ?9 l8 H应用
; d0 I" G6 z0 {: j/ }: f: e0 a" N( p% D' U) d, A0 y
# I7 {, y! w* _- a! ^4 _) i6 Z
1、启动时钟安全系统CSS:
2 d& Z  K+ Y$ @2 {7 Q0 H! |% |1 t. W" H
$ N" B% z2 b5 ^
RCC_ClockSecuritySystEMCmd(ENABLE);     // (NMI 中断是不可屏蔽的!)3 i  J% k' W" V
2、外部振荡器实现时,产生中断,对应的中断程序:
0 ~1 B0 K/ z. n  V, ?/ T5 C* s$ A- u

6 b( S' s$ ~# W" R! svoid NMIException(void): t* f& }+ G) M* R
{
: v" _) y/ L1 g8 `9 o+ N8 j4 E, W     if (RCC_GetITStatus(RCC_IT_CSS) != RESET)# ^# v4 t* [$ w5 f# I! J: q
     {    // HSE、PLL 已被禁止(但是PLL 设置未变)' L8 m, d, M9 e+ T. X# \- |
          /* …… */ // 客户添加相应的系统保护代码处
! n8 F+ C9 k6 l% v: \2 E        // 下面为HSE恢复后的预设置代码3 F" C  `7 Z( X3 ]. f- F5 R
       RCC_HSEConfig(RCC_HSE_ON);  // 使能HSE  P& z7 L! D( L0 o
        RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断2 `$ O+ g' U7 n9 {; F1 D
       RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就绪中断
) m. M- f( t  H9 ?3 h# h* ~       RCC_ClearITPendingBit(RCC_IT_CSS );  // 清除时钟安全系统中断的挂起位
' F$ @" m, E" Y3 |, y" {
3 m: C3 `' a* `. }       // 至此,一旦HSE时钟恢复,将发生HSERDY中断,
6 m5 Y5 L" C0 ~% B3 l2 g, `" g! h# C$ k
       //在RCC中断处理程序里, 系统时钟可以设置到以前的状态 . |. u5 _; W+ _
    }* _+ |& Q; g; x' J
}
* F6 X" e4 c, |# Q8 e  e& o3、在RCC的中断处理程序中,再对HSE和PLL 进行相应的处理。
% o* Y* i" H9 W; q) [: y

该用户从未签到

3#
发表于 2022-2-28 17:27 | 只看该作者
晶体振荡器失去作用导致
" S: \" _, i! {9 |0 d  b, ^+ \" [

该用户从未签到

2#
发表于 2022-1-14 14:30 | 只看该作者
CSS被激活HSE时钟出现故障自动产生 NMI,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 23:16 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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