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

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

[复制链接]
酱哒哒 发布时间:2017-9-30 15:26
【新手兴趣向 NO.1 】STM32进阶探究之存储占用浅析
) s, L; n/ e3 j- [/ Z- w% U6 w/ M( ^6 Q3 B
- a( g' X: A' e1 X
【新手兴趣向 NO.2 】STM32进阶探究之应用启动(一)之嵌入式
8 B/ T% b7 y- R  X0 f$ I* q7 y! }* i4 T- F% h" S8 n
0 A' x3 v/ i. W3 \
---------------------------------------------------------------------------------------
: b. H' ]7 E* T/ z- w一.CSS时钟安全机制简介css时钟安全机制主要用于外部晶振(HSE及LSE)出现“故障”(故障STM32未明确说明)时,为了避免因为外部晶振挂掉导致MCU宕机,而进行的一种补救的措施。简单说来,一旦外部晶振出“故障”,就会触发CSS中断,在中断中可以人为进行软件设计,添加时钟切换程序,切回HSI或者MSI或者LSI,确保MCU可以继续有效工作。另外,HSE的CSS中断似乎不具有休眠唤醒功能,LSE的CSS中断可以触发standby模式下的唤醒。
! n2 S  H2 z& b% B! r: O1.那么,到底用不用CSS时钟安全机制?+ Q4 K$ c& h- j5 h# @- d

( m3 ~) X  ]1 T. `, Q1 {! ^针对上面这个问题,经过本人实际测试,下面简要说明几点:  x0 j$ [* Z& p& I9 w9 A& j
(1)CSS时钟安全机制一旦启用,对于外部晶振变化极其敏感,本人实测发现,例如手只是靠近PCB上晶振位置(还未接触),就可能会触发CSS中断。所以,STM32提到的晶振“故障”,最小的程度就像晶振扰动,就会触发。
) W, x. X8 U9 ^1 ]& P" o7 @7 D# R; s" j" b
(2)一般不使用CSS时钟安全机制的情况下,出现晶振频率扰动或者直接短路晶振管脚,也仅仅只是会导致程序执行速度变慢或者程序直接停滞。一旦恢复晶振后,程序依旧会继续执行。(相当于晶振出问题期间,程序就停在那儿)目前暂未发现,因为晶振原因导致CPU 程序指针直接出错的情况,但不排除此类情况发生。5 ?8 v* O' G4 e- f3 q: z
所以,到底是否使用CSS时钟安全机制,还需要仔细斟酌。
8 k7 D; t0 m0 ]: C---------------------------------------------------------------------------------------; T' Y" c: H6 [
二.HSE下的CSS时钟安全机制
$ l5 u* K1 s0 O& x7 ?0 R1.如何启用HSE CSS?
4 Z5 V, [% G- ~9 p8 z必须等待HSE ready,然后软件启用(调取相应库函数),另外不必配置任何中断。# x  z1 s# I3 N& P# g; A

& }' C9 S6 \7 X9 q' q) q4 ?* g2.触发机制?
1 C6 p5 h+ n0 f2 z  y! DHSE CSS一旦启用,如果检测到外部HSE晶振故障,则HSE时钟自动关闭,此时主系统时钟自动切回MSI或者HSI16(可以配置RCC_CFGR->STOPWCK进行选择,并且这个时钟也会成为退出STOP低功耗模式时的系统主时钟),此处存在一个问题:那么上电复位后,在用户配置时钟前,这个期间的系统主时钟是否会受该STOPWCK配置影响?希望大佬,解答一下,究竟是MSI,还是由STOPWCK位决定?  q% ^7 q  R# h0 g
禁用HSE后,时钟故障事件会被发送到高级控制定时器的断点输入(TIM1 / TIM8和TIM15 / 16/17),并产生中断以通知软件有关故障(即CSSI中断触发),CSSI中断被连接到了NMI中断(不可屏蔽中断),需要注意NMI中断优先级仅仅低于复位中断,也就是说在NMI内部,基本上其他中断都不能及时响应。. k+ R0 }; n% \- ?
另外,记得及时清除CSSI中断标志位,否则将会反复触发NMI中断。7 I& F3 L; p# F" y* n; c( R

( T' C4 t: W0 _, h" W3.常见用法
4 q! M0 G+ ^: L* U! ?/ b一般使能HSE CSS后,在NMI中断内部添加切换函数,将时钟切回MSI或者HSI或者其他。极其重要的一点就是:如果用了PLL,那么触发css中断的时候,PLL会被禁用!但是PLL的配置是没有变的,所以如果切换成其他时钟还需要再度打开PLL(如果要使用的话)。
5 y* F" O: @( P7 n" i: E; G4 a$ P# r+ o% e6 N
4.小结8 w% r$ S2 ^) f9 a
触发HSECSS时:9 ~  B: ^6 B. |3 R
①HSE禁用,系统主时钟自动切回MSI或者HSI16- c0 e5 w- L8 ^! W4 i% ~% ]
②PLL禁用,但PLL基本配置不会改变3 y* ^6 n2 k: @* Y
③CSS功能自动禁用
% w) i8 [2 h& [
$ o( h* `/ g$ A2 l---------------------------------------------------------------------------------------
: U: Y# {9 u* R$ d9 @三.LSE下的CSS时钟安全机制
# m% i$ [" I) ^7 j+ V6 Q1 h
1 K) K: \. v% Q8 y$ _, Q" O) |( _4 H6 F; m& ^/ F0 I
随着物联网的发展,低功耗要求越来越高,基本上产品都会使用低功耗模式。STM32也提供了许多低功耗模式,常见的案例中,多数都会使用RTC作为一种低功耗唤醒源。而RTC为了精确,都会采用外部LSE,所以如果外部LSE一旦挂掉,就可能导致设备不能按时唤醒,造成损失。2 C: c; @) e! ^& D+ }; g# \- \) t
所以,LSE的时钟安全还是很有必要了解下。+ F4 B7 X7 z( `- |1 e
* \# F/ p" b" R2 n
简介:使能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等这些位都不会变化。)6 \. Q' v- W! w3 N- y( @5 A
另外,如果处于MSI的PLL模式下,那么此模式会被禁用。
" V: z$ v6 c5 s* w5 v1 J) Q; F4 W% A$ ?2 V
1.如何启用LSE CSS?* h( @# N$ p( I- E
与HSE CSS类似,软件启用。但必须在LSE 使能、且就绪、且LSE选作RTC主时钟(三个条件)之后,才可以启用LSE CSS功能。
3 k* d5 Q( C8 ]9 L' T$ T. a! ?- H( j0 U! F% q
在这要啰嗦一句,LSE 的CSS使用起来比HSE复杂许多,主要是因为:使能LSE CSS的这个标志位处于RCC_BDCR寄存器(电池备份域控制寄存器),这个寄存器和备份域性质类似,有电池的情况下,会保持。而且,这个RCC_BDCR寄存器上所有的位基本都不可单独Reset!软件上reset RCC_BDCR寄存器,都是通过使能RCC_BDCR->BDRST,进行重置。一旦使能RCC_BDCR->BDRST,整个RCC_BDCR及备份域统统会被Reset。) w# b/ t; k: ^. W. k) X
( M& l+ u: _4 Z# o. K) |' v2 f3 ?' {
2.触发机制?8 M1 }+ r- B6 ^! A+ s
LSE CSS的触发配合要比HSE CSS的复杂,LSE CSS必须进行中断配置,配置流程如下:" s0 |% n5 [+ Y+ T2 w
①使能LSE CSS
# X3 U8 p9 c& _; M$ B8 s2 s) N% x②使能TAMP_STAMP_IRQn中断配置,配置优先级4 q! a3 _' e. l- K4 d& Y5 A, E& n; t% ~
③使能LL_EXTI_LINE_19中断(配置为上升沿触发),这是因为RTC Tamper,TimeStamp复用在的EXIT Line19上!
( Z1 S# m7 v( p一旦触发了LSE CSS,就会进入TAMP_STAMP_IRQHandler中断服务函数,需要注意:如果在中断中要进行RCC_BDCR及RTC寄存器操作,需要打开备份域通道。
" \2 H0 s- R( T$ e, t# W  m# Q9 V- B: F8 w3 V& P: ^) A
3.小结! `& s5 ^( }) ~5 m4 U9 Z! R
触发LSECSS时:
  u  _9 @+ F* b( h①LSE不再是RTC时钟) e. Q6 b8 Z/ W/ |5 z3 H# F9 G
②MSI的PLL模式禁用
# b) B) b4 {- H. P③standby模式下,会产生唤醒" ~: O' }: b+ T7 c  r7 g
---------------------------------------------------------------------------------------4 O) B$ H. n9 s  V8 {% u

! `4 N* w1 L9 [" a: F2 U% b, r5 z四.总结2 v/ A" a5 K0 A9 _& E3 y  `
下面给出了HSE和LSE CSS中断向量表:8 J/ Q4 g! y& ~4 Q7 p4 x

中断向量表

中断向量表

4 |8 ?0 s% {, R  K- Q1.HSE的时钟安全使用起来还是比较不错的2 b! x# i% @3 G4 }9 w  Y# d9 Q) T
2.LSE的时钟安全机制触发后的程序逻辑比较难处理,触发CSS后,需要清除许多标志位,而这些标志位都在RCC_BDCR上,只有重置整个电池备份域才能够清除。还有就是待机下的唤醒,也需要考虑好程序逻辑。
, A/ n' ^+ q4 y6 z' Y  ~- E
$ g5 s) p# U; U6 i$ }0 {另外,也可以参考下https://www.stmcu.org.cn/module/forum/thread-610054-1-1.html     时钟安全系统的应用(LSE 篇),, }) }5 S7 N) J' Y

6 m( y8 G% v2 A: f; G# S- b& n- u% |0 z: n# Q# i5 j7 b9 W

6 Q4 S3 R: q% e# k3 D+ N5 \/ i# I" L

评分

参与人数 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:085 N% w3 Q, ~& l' X, m% b4 Y
学习了

; N1 U% h% @; u: W扎心了,老铁,我还参考了你的关于LSE CSS的帖子
epochal 回答时间:2017-10-1 08:35:19
学习学习!
zero99 回答时间:2017-10-9 13:34:40
酱哒哒 发表于 2017-9-30 23:54
% j; F3 a/ p2 R% L  o) Y扎心了,老铁,我还参考了你的关于LSE CSS的帖子

) r& q' c9 i+ _  J+ _* d) Z# b2 k  z- t6 f

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版