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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
原因
  W3 @4 @# [: f     在实际应用中,经常出现由于晶体振荡器在运行中失去 作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。严重时,由于系统的死机造成监控失效, 导致无法挽回的损失!
- N/ l" J2 I, Q% U; l  目的
; q% G  f' e. g( B  T      STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE) 失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。
. X' `( x6 m, ^. ]" V6 I+ \  原理# n0 w  `$ g7 h5 ?7 }
      时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如 果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,此中断被连接到Cortex-M3的NMI的中断;与此同时CSS将内部RC振荡器切换为STM32的系统时钟源。( 对于STM32F103 ,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)

. P$ t- Y' ]' A- M3 S7 ]
  S$ C( T; ]3 o2 g6 H; U 注意; p7 p, m! T0 j4 t; l# R9 F
      一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR) 里的CSSC 位来清除CSS中断。2 E1 r: y$ \' n' {8 P- \
  9 D: F7 h) a* ?/ m
应用
+ P! z- T: }& F' w" @! s8 B& s) |. {* g, q9 k" u

2 g0 N" w# P9 o( s: Q) I1、启动时钟安全系统CSS:* i7 d5 r$ i$ j8 N  n  q
% K. r* I! w+ M2 G
; e6 `% J. ]; g( n, ]/ [
RCC_ClockSecuritySystEMCmd(ENABLE);     // (NMI 中断是不可屏蔽的!)
' `; Y& V- P  s% L  b2、外部振荡器实现时,产生中断,对应的中断程序:
  E5 \( k5 Y: s6 I
! p; r$ ~8 L5 E; d% f( r: N2 e1 p2 y4 R6 h! \
void NMIException(void)3 F( R! r/ }2 M8 j/ R) u& N
{; b# A- N. r* p$ R
     if (RCC_GetITStatus(RCC_IT_CSS) != RESET)
0 D/ l' h- W/ F% E$ _6 h& N. F     {    // HSE、PLL 已被禁止(但是PLL 设置未变)
, T  W( |" H7 r1 B: i# R1 E, [          /* …… */ // 客户添加相应的系统保护代码处& j, p  i$ _9 K& C9 o/ R4 _
        // 下面为HSE恢复后的预设置代码
9 O* {& j5 K0 Q' t3 A       RCC_HSEConfig(RCC_HSE_ON);  // 使能HSE; N! D- f% J/ U% ^. S& z5 U5 o; i
        RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断: d) r  F9 {, f3 @
       RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就绪中断
$ t9 Z' }5 @1 c- y, t: ~       RCC_ClearITPendingBit(RCC_IT_CSS );  // 清除时钟安全系统中断的挂起位9 C+ \: V/ s% I! ?( ^& t

8 U# A9 I. ^1 x       // 至此,一旦HSE时钟恢复,将发生HSERDY中断,
! l+ ~8 R$ I$ ^: x& g4 b$ [) q9 ^: H$ R/ E
       //在RCC中断处理程序里, 系统时钟可以设置到以前的状态
8 @( ]) |  Z9 P8 E4 \4 j! l( q0 N    }
- {1 G: p  ~. K }& ~# T8 [6 H& l  j  x3 q
3、在RCC的中断处理程序中,再对HSE和PLL 进行相应的处理。
% L( `! J- Q) R2 G2 T

该用户从未签到

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

该用户从未签到

3#
发表于 2022-2-28 17:27 | 只看该作者
晶体振荡器失去作用导致
, d7 D, n3 m( E9 a) K8 E# @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-7 11:28 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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