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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
原因7 g, p0 E, v  q
     在实际应用中,经常出现由于晶体振荡器在运行中失去 作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。严重时,由于系统的死机造成监控失效, 导致无法挽回的损失!$ j) E& i) T. f& }8 a! i/ Q
  目的 ) ?' g  n& A0 c; N# X) m. h( i
      STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE) 失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。
# N: E% ^0 @3 M/ x7 s" i" v( V  原理- Y6 S  m- c% l6 ]/ j# Q- H/ K
      时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如 果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,此中断被连接到Cortex-M3的NMI的中断;与此同时CSS将内部RC振荡器切换为STM32的系统时钟源。( 对于STM32F103 ,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)
) L+ \+ N" C1 t' d5 J9 C
; ?: j- u' a* @0 F! `$ _) `. G9 ?1 ?) ~
注意" T1 C2 J  a  D
      一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR) 里的CSSC 位来清除CSS中断。* s0 d3 U0 d! l
  
/ I! k% G9 h: e8 {. @应用% m- [0 v2 i. C* C6 E

1 D7 R: p: s5 L( h" O. g9 p  t: \
! N3 B. J: Y1 O/ }, x/ z1、启动时钟安全系统CSS:
; f. N7 q: T0 e# o9 w3 l1 `; z$ G" G! g8 O
2 T6 w8 W9 P+ Y& L) j
RCC_ClockSecuritySystEMCmd(ENABLE);     // (NMI 中断是不可屏蔽的!)
* T0 V) U" j, F$ l2、外部振荡器实现时,产生中断,对应的中断程序:+ ?/ t( |1 O" H9 ?! a3 \# S8 M

& Z" |( }3 h, d# C3 _# P4 i' y0 ~/ F" \" I# \
void NMIException(void)9 C4 g* ]0 V7 V) M7 `
{' T0 u( F2 T( ?) k
     if (RCC_GetITStatus(RCC_IT_CSS) != RESET)* K% M0 ], [& F4 e. u, l! t4 _
     {    // HSE、PLL 已被禁止(但是PLL 设置未变)
1 C6 _7 b* D# T          /* …… */ // 客户添加相应的系统保护代码处
2 y; O  x( l6 g% {7 i" ~        // 下面为HSE恢复后的预设置代码
, }$ h# w' t* Z, U2 |       RCC_HSEConfig(RCC_HSE_ON);  // 使能HSE
0 r' _4 D  x) s4 I, d        RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断
: [+ j7 O6 H% B1 e3 q' _       RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就绪中断+ v# o+ a1 T2 w' B8 a
       RCC_ClearITPendingBit(RCC_IT_CSS );  // 清除时钟安全系统中断的挂起位
7 G8 _) d  E. i7 W0 ]# m6 H0 D' [# D0 A+ S! u6 `
       // 至此,一旦HSE时钟恢复,将发生HSERDY中断,
5 k% \6 P2 M  w" h2 H3 K% ^' E6 q: V: O" x+ L4 \
       //在RCC中断处理程序里, 系统时钟可以设置到以前的状态
% A/ B' P) \% C* d: r' |% a    }+ Q+ O- ]* ?4 E
}9 f. ?: _/ f3 q+ d+ ~! D. {" G
3、在RCC的中断处理程序中,再对HSE和PLL 进行相应的处理。

3 u2 _6 b. q6 A' y, L  t

该用户从未签到

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

该用户从未签到

3#
发表于 2022-2-28 17:27 | 只看该作者
晶体振荡器失去作用导致" z: d/ e9 s& O7 d" F, m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-25 13:40 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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