你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32新手向第三课】CSS 时钟安全功能详解(HSE+LSE)

[复制链接]
酱哒哒 发布时间:2017-9-30 15:26
【新手兴趣向 NO.1 】STM32进阶探究之存储占用浅析
* [8 @) t& k! {6 g& W( u$ m
4 Y$ G/ T6 I! K9 M8 s9 D

+ j& Z+ I8 ~- }【新手兴趣向 NO.2 】STM32进阶探究之应用启动(一)之嵌入式' X5 S+ R2 b3 s" u8 b# n
4 k; \' f& o( u0 m" z2 L3 N
$ Z5 m( D3 a4 Z  t9 p
---------------------------------------------------------------------------------------
8 ^3 d1 Y* b+ d1 C一.CSS时钟安全机制简介css时钟安全机制主要用于外部晶振(HSE及LSE)出现“故障”(故障STM32未明确说明)时,为了避免因为外部晶振挂掉导致MCU宕机,而进行的一种补救的措施。简单说来,一旦外部晶振出“故障”,就会触发CSS中断,在中断中可以人为进行软件设计,添加时钟切换程序,切回HSI或者MSI或者LSI,确保MCU可以继续有效工作。另外,HSE的CSS中断似乎不具有休眠唤醒功能,LSE的CSS中断可以触发standby模式下的唤醒。" ~. h) j$ H5 C" [1 m+ j
1.那么,到底用不用CSS时钟安全机制?
  }' b( U! E' k& _! u1 f1 C, j# v0 i2 p: j
针对上面这个问题,经过本人实际测试,下面简要说明几点:
5 K/ \5 W4 C- e4 T8 c(1)CSS时钟安全机制一旦启用,对于外部晶振变化极其敏感,本人实测发现,例如手只是靠近PCB上晶振位置(还未接触),就可能会触发CSS中断。所以,STM32提到的晶振“故障”,最小的程度就像晶振扰动,就会触发。/ P8 ~% @) p7 W: ~2 C; O) V

5 H  c0 Z) F4 Z! t/ Z* V# V2 I(2)一般不使用CSS时钟安全机制的情况下,出现晶振频率扰动或者直接短路晶振管脚,也仅仅只是会导致程序执行速度变慢或者程序直接停滞。一旦恢复晶振后,程序依旧会继续执行。(相当于晶振出问题期间,程序就停在那儿)目前暂未发现,因为晶振原因导致CPU 程序指针直接出错的情况,但不排除此类情况发生。
/ U8 x" U  f" {1 |9 k  i5 U所以,到底是否使用CSS时钟安全机制,还需要仔细斟酌。; r, q) k( m' J0 Q* d) t- J/ t
---------------------------------------------------------------------------------------
% y' Q( I+ l* f2 r二.HSE下的CSS时钟安全机制. v" G9 g; z" o6 ]7 V0 P1 c2 F
1.如何启用HSE CSS?
' i% p2 I! z, H4 d1 Z必须等待HSE ready,然后软件启用(调取相应库函数),另外不必配置任何中断。
- p2 s, L. d# {% `5 }# X
, k& ^- x" \& H6 o* N. j7 Y, y2.触发机制?
5 ^: o1 L5 x- L' X( FHSE CSS一旦启用,如果检测到外部HSE晶振故障,则HSE时钟自动关闭,此时主系统时钟自动切回MSI或者HSI16(可以配置RCC_CFGR->STOPWCK进行选择,并且这个时钟也会成为退出STOP低功耗模式时的系统主时钟),此处存在一个问题:那么上电复位后,在用户配置时钟前,这个期间的系统主时钟是否会受该STOPWCK配置影响?希望大佬,解答一下,究竟是MSI,还是由STOPWCK位决定?
) F" V4 B- X: `8 |禁用HSE后,时钟故障事件会被发送到高级控制定时器的断点输入(TIM1 / TIM8和TIM15 / 16/17),并产生中断以通知软件有关故障(即CSSI中断触发),CSSI中断被连接到了NMI中断(不可屏蔽中断),需要注意NMI中断优先级仅仅低于复位中断,也就是说在NMI内部,基本上其他中断都不能及时响应。9 y% [& O' ]6 g0 _. c2 `
另外,记得及时清除CSSI中断标志位,否则将会反复触发NMI中断。
! M) ]9 E( l( M0 w$ a
; @, F& R0 v- t& B  J8 q2 V3.常见用法1 T+ F% ~6 J4 K7 H
一般使能HSE CSS后,在NMI中断内部添加切换函数,将时钟切回MSI或者HSI或者其他。极其重要的一点就是:如果用了PLL,那么触发css中断的时候,PLL会被禁用!但是PLL的配置是没有变的,所以如果切换成其他时钟还需要再度打开PLL(如果要使用的话)
) K' x) `, i- t  a5 R% Y6 y. l( e; v! Z9 ]+ f& E' P0 [: O
4.小结
: a! X- L# j3 N0 `+ m触发HSECSS时:
" X) x, W. I( R0 A9 m) A①HSE禁用,系统主时钟自动切回MSI或者HSI16& ~% x0 D0 e) P5 b
②PLL禁用,但PLL基本配置不会改变4 b  T" y, K) i. x9 L& d: {3 X, G' \
③CSS功能自动禁用
* [7 i, `8 u" W' s
% ]5 S. p& S7 L: M5 t2 v4 F---------------------------------------------------------------------------------------1 S) @8 P# m2 [# [9 \
三.LSE下的CSS时钟安全机制8 E$ E& L2 U# M$ W+ c
% e" Z4 R8 N5 K8 b& I. B5 X

' g) Q& e, V& F: F# {' U7 s随着物联网的发展,低功耗要求越来越高,基本上产品都会使用低功耗模式。STM32也提供了许多低功耗模式,常见的案例中,多数都会使用RTC作为一种低功耗唤醒源。而RTC为了精确,都会采用外部LSE,所以如果外部LSE一旦挂掉,就可能导致设备不能按时唤醒,造成损失。
! d: m7 f9 n; g7 Y所以,LSE的时钟安全还是很有必要了解下。  D1 e; _# U) p8 [$ B7 a

0 T: L8 W* H; o6 {$ g% ~简介:使能LSE CSS位后就启用了安全机制。LSE CSS机制可以工作在除VBAT外的所有模式以及系统复位下(但不包括上电复位)。如果在LSE振荡器上检测到故障,则LSE不再用作RTC时钟(RTC停止),但此时不会对硬件寄存器作任何操作(在这儿,我解释一下不对硬件寄存器作任何操作的意思,RTC在选择时钟的时候,有个标志位RCC_BDCR->RTCSEL[1:0],假如选择了LSE作RTC时钟,那么RCC_BDCR->RTCSEL就是0x01,一旦触发CSS后,虽然LSE不再是RTC时钟了,但是前面这个标志位的值不会变动!并且这个时候,RCC_BDCR中LSEON等这些位都不会变化。)" C3 {. s* g% f. [) ?; G
另外,如果处于MSI的PLL模式下,那么此模式会被禁用。
2 B5 h& f8 k6 G: ?/ d! O! d& t! d6 z
1.如何启用LSE CSS?8 U' r$ s5 ?+ u
与HSE CSS类似,软件启用。但必须在LSE 使能、且就绪、且LSE选作RTC主时钟(三个条件)之后,才可以启用LSE CSS功能。
! t2 f+ Q" f; G0 _% r
% S( e7 K7 p3 `  F在这要啰嗦一句,LSE 的CSS使用起来比HSE复杂许多,主要是因为:使能LSE CSS的这个标志位处于RCC_BDCR寄存器(电池备份域控制寄存器),这个寄存器和备份域性质类似,有电池的情况下,会保持。而且,这个RCC_BDCR寄存器上所有的位基本都不可单独Reset!软件上reset RCC_BDCR寄存器,都是通过使能RCC_BDCR->BDRST,进行重置。一旦使能RCC_BDCR->BDRST,整个RCC_BDCR及备份域统统会被Reset。
  ~4 S4 H& ?8 K; X6 X3 [4 n% b% O2 Y* _3 v7 n7 G9 A
2.触发机制?- o; p- Q# f5 A9 p7 P6 W' E
LSE CSS的触发配合要比HSE CSS的复杂,LSE CSS必须进行中断配置,配置流程如下:( Z6 o- q8 i0 s  M! S
①使能LSE CSS  X& w5 t3 W4 z; D& z
②使能TAMP_STAMP_IRQn中断配置,配置优先级
; m4 w% o7 r3 p9 R* c+ F6 u9 E0 S③使能LL_EXTI_LINE_19中断(配置为上升沿触发),这是因为RTC Tamper,TimeStamp复用在的EXIT Line19上!! t0 _) r4 Z  v& e
一旦触发了LSE CSS,就会进入TAMP_STAMP_IRQHandler中断服务函数,需要注意:如果在中断中要进行RCC_BDCR及RTC寄存器操作,需要打开备份域通道。
' r: Z$ d6 c  f/ X; b% X9 F5 O1 D' D
3.小结, e) P+ U9 a3 o" T
触发LSECSS时:& Z4 u  A+ Z4 Q3 j" \
①LSE不再是RTC时钟' Z- Z: H5 E* h* K
②MSI的PLL模式禁用
1 n% J: p; l, g0 a) f6 M$ x③standby模式下,会产生唤醒
; k$ R3 K: I' h3 k---------------------------------------------------------------------------------------9 L0 {- X5 i5 @6 v/ f
8 j# E. Z+ F. C8 W* n
四.总结8 k' p5 d; X3 {. g) y, w" I
下面给出了HSE和LSE CSS中断向量表:- i3 c/ ?+ ]: M3 T8 X

中断向量表

中断向量表

# {4 [+ Y$ k; J  |" B9 Y4 G+ I1.HSE的时钟安全使用起来还是比较不错的& I' [7 g% q( x7 v* i
2.LSE的时钟安全机制触发后的程序逻辑比较难处理,触发CSS后,需要清除许多标志位,而这些标志位都在RCC_BDCR上,只有重置整个电池备份域才能够清除。还有就是待机下的唤醒,也需要考虑好程序逻辑。5 o0 [+ f, _; W3 q- I" A
$ h6 P; a& B) C- o) H; f. a
另外,也可以参考下https://www.stmcu.org.cn/module/forum/thread-610054-1-1.html     时钟安全系统的应用(LSE 篇),
  d6 ?0 u  L. q# w! m, V6 ]9 p( k- g$ v' W0 {

  G( I1 t4 i" A* v8 {0 L# x
  o7 H) w: r( ~1 j, d' a; F
' t5 r/ ~0 F' Q) j

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 2 评论4 发布时间:2017-9-30 15:26

举报

4个回答
zero99 回答时间:2017-9-30 16:08:43
学习了
酱哒哒 回答时间:2017-9-30 23:54:22
zero99 发表于 2017-9-30 16:08
7 l0 `/ I+ i7 y8 ?& {! E* k2 q8 P' a' Z学习了
! y, ]# I' B# ]2 N4 K, ~
扎心了,老铁,我还参考了你的关于LSE CSS的帖子
epochal 回答时间:2017-10-1 08:35:19
学习学习!
zero99 回答时间:2017-10-9 13:34:40
酱哒哒 发表于 2017-9-30 23:54
6 {- |: D2 z; U2 n; {; n  U1 R. n扎心了,老铁,我还参考了你的关于LSE CSS的帖子
' C) c, T4 @+ N- h

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版