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

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

[复制链接]
酱哒哒 发布时间:2017-9-30 15:26
【新手兴趣向 NO.1 】STM32进阶探究之存储占用浅析6 U0 h1 M6 U. m. |* @* B- f& j

5 |" j2 F& J4 t( b2 i7 Z
2 O: ?5 V* h! J: j
【新手兴趣向 NO.2 】STM32进阶探究之应用启动(一)之嵌入式9 |. k9 O3 ~3 |& o1 `: @; m
5 q6 z$ u9 l9 G3 X
! W$ ]+ ~" H+ s* D, H7 p- d
---------------------------------------------------------------------------------------
8 h; C5 g% ^* G( Y9 z% Q  }2 U一.CSS时钟安全机制简介css时钟安全机制主要用于外部晶振(HSE及LSE)出现“故障”(故障STM32未明确说明)时,为了避免因为外部晶振挂掉导致MCU宕机,而进行的一种补救的措施。简单说来,一旦外部晶振出“故障”,就会触发CSS中断,在中断中可以人为进行软件设计,添加时钟切换程序,切回HSI或者MSI或者LSI,确保MCU可以继续有效工作。另外,HSE的CSS中断似乎不具有休眠唤醒功能,LSE的CSS中断可以触发standby模式下的唤醒。" ]! h4 J  \8 x2 K& [
1.那么,到底用不用CSS时钟安全机制?* x" L& m9 n& l8 U

/ {0 D" j) \- E) x( u9 a针对上面这个问题,经过本人实际测试,下面简要说明几点:
7 n) J4 ?! t3 `- z% Z(1)CSS时钟安全机制一旦启用,对于外部晶振变化极其敏感,本人实测发现,例如手只是靠近PCB上晶振位置(还未接触),就可能会触发CSS中断。所以,STM32提到的晶振“故障”,最小的程度就像晶振扰动,就会触发。: C# h/ K# j4 E& K4 C  V! ], x( r

! ?, a) ]- R# R' y  f(2)一般不使用CSS时钟安全机制的情况下,出现晶振频率扰动或者直接短路晶振管脚,也仅仅只是会导致程序执行速度变慢或者程序直接停滞。一旦恢复晶振后,程序依旧会继续执行。(相当于晶振出问题期间,程序就停在那儿)目前暂未发现,因为晶振原因导致CPU 程序指针直接出错的情况,但不排除此类情况发生。
- O$ E% _/ c; e: X9 }2 a9 [所以,到底是否使用CSS时钟安全机制,还需要仔细斟酌。
% X* e2 V6 ~# I3 Q( r, W- N6 `* [---------------------------------------------------------------------------------------7 L/ a3 L$ e5 t- m
二.HSE下的CSS时钟安全机制/ L8 a: E5 ]. O6 R" i) o
1.如何启用HSE CSS?
) W3 T  x% @$ A7 q. s6 x必须等待HSE ready,然后软件启用(调取相应库函数),另外不必配置任何中断。' s( U$ }4 h  Y- k

6 z5 X$ C) N# ?& @! I# h2.触发机制?
/ @/ a4 R2 \5 [8 P2 ?: oHSE CSS一旦启用,如果检测到外部HSE晶振故障,则HSE时钟自动关闭,此时主系统时钟自动切回MSI或者HSI16(可以配置RCC_CFGR->STOPWCK进行选择,并且这个时钟也会成为退出STOP低功耗模式时的系统主时钟),此处存在一个问题:那么上电复位后,在用户配置时钟前,这个期间的系统主时钟是否会受该STOPWCK配置影响?希望大佬,解答一下,究竟是MSI,还是由STOPWCK位决定?
, I# X0 |5 g, k9 g# `禁用HSE后,时钟故障事件会被发送到高级控制定时器的断点输入(TIM1 / TIM8和TIM15 / 16/17),并产生中断以通知软件有关故障(即CSSI中断触发),CSSI中断被连接到了NMI中断(不可屏蔽中断),需要注意NMI中断优先级仅仅低于复位中断,也就是说在NMI内部,基本上其他中断都不能及时响应。7 ~4 s. ]# H+ W4 g; x6 x
另外,记得及时清除CSSI中断标志位,否则将会反复触发NMI中断。3 |7 q' h3 M5 [

4 {, M/ ]" ^9 T" f# W8 N; v: x. D* K3.常见用法0 M8 q& h* W: ^( |
一般使能HSE CSS后,在NMI中断内部添加切换函数,将时钟切回MSI或者HSI或者其他。极其重要的一点就是:如果用了PLL,那么触发css中断的时候,PLL会被禁用!但是PLL的配置是没有变的,所以如果切换成其他时钟还需要再度打开PLL(如果要使用的话)7 S% z/ J% Z% q: I+ X& ~/ y- ~
4 _2 R" o) t, g& \5 Y
4.小结
; v2 @! i! N% i* y: G7 |( G触发HSECSS时:" X) c. f- i8 h! m
①HSE禁用,系统主时钟自动切回MSI或者HSI163 ^  c! R. h2 ?' s! ]) d  p
②PLL禁用,但PLL基本配置不会改变- ?2 J4 }& r/ ^1 I3 V1 y
③CSS功能自动禁用
$ V1 Q' G4 S, t& @* B, s
6 F! n, S$ u/ f! @4 o---------------------------------------------------------------------------------------+ Y- _3 d4 v& p4 X( A9 K
三.LSE下的CSS时钟安全机制6 g4 b) w6 S' l# e+ r& a  _
2 B: q  W" V0 @. Z5 T( e

5 L+ {7 ?8 X) P6 R随着物联网的发展,低功耗要求越来越高,基本上产品都会使用低功耗模式。STM32也提供了许多低功耗模式,常见的案例中,多数都会使用RTC作为一种低功耗唤醒源。而RTC为了精确,都会采用外部LSE,所以如果外部LSE一旦挂掉,就可能导致设备不能按时唤醒,造成损失。
3 E- |0 Y0 w. L$ ^) M$ V所以,LSE的时钟安全还是很有必要了解下。# v) G( n5 F) A" J/ w

8 C/ R2 Q2 [+ r* r: r' A) 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等这些位都不会变化。)
. r) q0 [) w; a另外,如果处于MSI的PLL模式下,那么此模式会被禁用。, D2 ]/ N$ t, K9 B

+ K( z) l2 O' b& ^; N2 w1.如何启用LSE CSS?
* D$ _9 W; z+ P与HSE CSS类似,软件启用。但必须在LSE 使能、且就绪、且LSE选作RTC主时钟(三个条件)之后,才可以启用LSE CSS功能。
+ u/ p# l' x4 }$ ^6 r, Z0 B6 i& M4 r
在这要啰嗦一句,LSE 的CSS使用起来比HSE复杂许多,主要是因为:使能LSE CSS的这个标志位处于RCC_BDCR寄存器(电池备份域控制寄存器),这个寄存器和备份域性质类似,有电池的情况下,会保持。而且,这个RCC_BDCR寄存器上所有的位基本都不可单独Reset!软件上reset RCC_BDCR寄存器,都是通过使能RCC_BDCR->BDRST,进行重置。一旦使能RCC_BDCR->BDRST,整个RCC_BDCR及备份域统统会被Reset。
3 S; N" x3 e% C3 m: B& P2 u
- v- {# D; z+ g0 v' {  `2.触发机制?
9 j1 o. T, K2 Z; I6 n1 ?$ cLSE CSS的触发配合要比HSE CSS的复杂,LSE CSS必须进行中断配置,配置流程如下:
) U& D# {8 X, l①使能LSE CSS1 G* O' Z+ x3 q( F% T4 a4 P
②使能TAMP_STAMP_IRQn中断配置,配置优先级
$ }+ G8 _$ u/ m7 A; D③使能LL_EXTI_LINE_19中断(配置为上升沿触发),这是因为RTC Tamper,TimeStamp复用在的EXIT Line19上!& j4 w$ c) ~9 H: X( x8 A6 m3 k( m
一旦触发了LSE CSS,就会进入TAMP_STAMP_IRQHandler中断服务函数,需要注意:如果在中断中要进行RCC_BDCR及RTC寄存器操作,需要打开备份域通道。9 N4 y6 A& D' S4 i$ }0 y  H. V
3 [8 z! ?0 j' l4 @  z
3.小结
0 |3 [8 A" W) H  M( j8 b2 o+ O; h5 x2 p触发LSECSS时:  |! g0 w2 Q5 |; M' z. Z
①LSE不再是RTC时钟7 r" V+ _$ C7 M# m" J
②MSI的PLL模式禁用& l8 Q8 \0 m/ r( B/ ?2 [
③standby模式下,会产生唤醒. S3 W5 H0 Q7 Q9 @
---------------------------------------------------------------------------------------
% s! k; z# |) f/ k: f9 x! X4 h( n5 Z6 R4 h( L
四.总结/ ~5 q  G$ L% M! v, d! r$ O
下面给出了HSE和LSE CSS中断向量表:: w1 b" J5 C! o6 ?. D, M( J$ B" @

中断向量表

中断向量表

% U9 v: g6 K# S. z5 k( x1.HSE的时钟安全使用起来还是比较不错的. m/ c% x/ _# u0 E) |0 ~, j
2.LSE的时钟安全机制触发后的程序逻辑比较难处理,触发CSS后,需要清除许多标志位,而这些标志位都在RCC_BDCR上,只有重置整个电池备份域才能够清除。还有就是待机下的唤醒,也需要考虑好程序逻辑。
- z8 B! ^+ y" C! g2 W. m# J. N. P& M. L- f2 c; F
另外,也可以参考下https://www.stmcu.org.cn/module/forum/thread-610054-1-1.html     时钟安全系统的应用(LSE 篇),+ J5 S8 C. L4 W

, X3 _# F3 t8 O* w# A" {% x& w+ u( e0 z/ H! _6 `
# `4 x8 V+ p4 `& ~; w

- k2 M3 C/ j% B3 G

评分

参与人数 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
" D# b5 z) v. r' m学习了

# S0 E9 E8 A! k8 F/ M扎心了,老铁,我还参考了你的关于LSE CSS的帖子
epochal 回答时间:2017-10-1 08:35:19
学习学习!
zero99 回答时间:2017-10-9 13:34:40
酱哒哒 发表于 2017-9-30 23:54
( R. P) z" R' m: Z扎心了,老铁,我还参考了你的关于LSE CSS的帖子
, E! G; V& U/ A

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版