|
【新手兴趣向 NO.1 】STM32进阶探究之存储占用浅析( o! x5 l- u# [ 5 b# o+ W" D2 ]. o 【新手兴趣向 NO.2 】STM32进阶探究之应用启动(一)之嵌入式 0 l$ R7 E4 X! O5 h --------------------------------------------------------------------------------------- 一.CSS时钟安全机制简介css时钟安全机制主要用于外部晶振(HSE及LSE)出现“故障”(故障STM32未明确说明)时,为了避免因为外部晶振挂掉导致MCU宕机,而进行的一种补救的措施。简单说来,一旦外部晶振出“故障”,就会触发CSS中断,在中断中可以人为进行软件设计,添加时钟切换程序,切回HSI或者MSI或者LSI,确保MCU可以继续有效工作。另外,HSE的CSS中断似乎不具有休眠唤醒功能,LSE的CSS中断可以触发standby模式下的唤醒。 1.那么,到底用不用CSS时钟安全机制? / x& [. ]" ? j9 h% V7 ?8 H 针对上面这个问题,经过本人实际测试,下面简要说明几点:8 t( o6 z' z7 m( O (1)CSS时钟安全机制一旦启用,对于外部晶振变化极其敏感,本人实测发现,例如手只是靠近PCB上晶振位置(还未接触),就可能会触发CSS中断。所以,STM32提到的晶振“故障”,最小的程度就像晶振扰动,就会触发。 (2)一般不使用CSS时钟安全机制的情况下,出现晶振频率扰动或者直接短路晶振管脚,也仅仅只是会导致程序执行速度变慢或者程序直接停滞。一旦恢复晶振后,程序依旧会继续执行。(相当于晶振出问题期间,程序就停在那儿)目前暂未发现,因为晶振原因导致CPU 程序指针直接出错的情况,但不排除此类情况发生。 ![]() 所以,到底是否使用CSS时钟安全机制,还需要仔细斟酌。5 D- |1 h. _2 |" H --------------------------------------------------------------------------------------- 二.HSE下的CSS时钟安全机制8 L# |9 {0 y+ E) W5 J- ] 1.如何启用HSE CSS? 必须等待HSE ready,然后软件启用(调取相应库函数),另外不必配置任何中断。+ R# J9 r% _6 w$ E6 g 5 y. a8 {: p! m+ T5 p 2.触发机制?( B! W6 A! m- a$ [ HSE CSS一旦启用,如果检测到外部HSE晶振故障,则HSE时钟自动关闭,此时主系统时钟自动切回MSI或者HSI16(可以配置RCC_CFGR->STOPWCK进行选择,并且这个时钟也会成为退出STOP低功耗模式时的系统主时钟),此处存在一个问题:那么上电复位后,在用户配置时钟前,这个期间的系统主时钟是否会受该STOPWCK配置影响?希望大佬,解答一下,究竟是MSI,还是由STOPWCK位决定?5 H ? i6 B) m# a: A 禁用HSE后,时钟故障事件会被发送到高级控制定时器的断点输入(TIM1 / TIM8和TIM15 / 16/17),并产生中断以通知软件有关故障(即CSSI中断触发),CSSI中断被连接到了NMI中断(不可屏蔽中断),需要注意NMI中断优先级仅仅低于复位中断,也就是说在NMI内部,基本上其他中断都不能及时响应。3 l$ T& d9 r9 w- P! S4 N 另外,记得及时清除CSSI中断标志位,否则将会反复触发NMI中断。0 W) O6 x# d9 @4 D* z- l ! g- S4 m G/ p" Y2 | 3.常见用法 一般使能HSE CSS后,在NMI中断内部添加切换函数,将时钟切回MSI或者HSI或者其他。极其重要的一点就是:如果用了PLL,那么触发css中断的时候,PLL会被禁用!但是PLL的配置是没有变的,所以如果切换成其他时钟还需要再度打开PLL(如果要使用的话)。9 c, j$ _2 r5 A& P6 n/ _ # f# h& L- h m. j c 4.小结9 l$ k, c* w, V 触发HSECSS时:+ y2 f6 `. F* Z) q$ S$ P1 k# J1 _0 ~ ①HSE禁用,系统主时钟自动切回MSI或者HSI16! j$ s! Z2 b( X5 N g8 x$ I4 _9 u ②PLL禁用,但PLL基本配置不会改变" q* A/ X6 r) O9 ~ ③CSS功能自动禁用' C7 Z5 a( O: j+ [# |" o$ G 9 x3 @% ]# E: x; p; M0 c ---------------------------------------------------------------------------------------0 ~, h" O5 @, b* j$ n% S 三.LSE下的CSS时钟安全机制 随着物联网的发展,低功耗要求越来越高,基本上产品都会使用低功耗模式。STM32也提供了许多低功耗模式,常见的案例中,多数都会使用RTC作为一种低功耗唤醒源。而RTC为了精确,都会采用外部LSE,所以如果外部LSE一旦挂掉,就可能导致设备不能按时唤醒,造成损失。 所以,LSE的时钟安全还是很有必要了解下。 简介:使能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等这些位都不会变化。) 另外,如果处于MSI的PLL模式下,那么此模式会被禁用。; L3 D; j9 S; s3 Y) r 1.如何启用LSE CSS?7 S! D9 I" {: H- f 与HSE CSS类似,软件启用。但必须在LSE 使能、且就绪、且LSE选作RTC主时钟(三个条件)之后,才可以启用LSE CSS功能。3 A) G" s! \/ f I# {2 j, x8 l, r- M 在这要啰嗦一句,LSE 的CSS使用起来比HSE复杂许多,主要是因为:使能LSE CSS的这个标志位处于RCC_BDCR寄存器(电池备份域控制寄存器),这个寄存器和备份域性质类似,有电池的情况下,会保持。而且,这个RCC_BDCR寄存器上所有的位基本都不可单独Reset!软件上reset RCC_BDCR寄存器,都是通过使能RCC_BDCR->BDRST,进行重置。一旦使能RCC_BDCR->BDRST,整个RCC_BDCR及备份域统统会被Reset。3 g! {' x/ f! `. |2 ^8 D 1 j/ L' J8 ^& ^ 2.触发机制?" p5 ?. H0 U9 ^, T, |1 m LSE CSS的触发配合要比HSE CSS的复杂,LSE CSS必须进行中断配置,配置流程如下: ①使能LSE CSS6 o2 H2 N1 _1 [- a( Q ②使能TAMP_STAMP_IRQn中断配置,配置优先级 ③使能LL_EXTI_LINE_19中断(配置为上升沿触发),这是因为RTC Tamper,TimeStamp复用在的EXIT Line19上!, g8 X# q2 S$ b 一旦触发了LSE CSS,就会进入TAMP_STAMP_IRQHandler中断服务函数,需要注意:如果在中断中要进行RCC_BDCR及RTC寄存器操作,需要打开备份域通道。 ( H$ k, R" `2 \9 ~" i* v 3.小结3 ~8 u/ ?6 v6 R# o! Z) a- H* O 触发LSECSS时:) q1 | f0 E1 i& M1 i& b' ^ ①LSE不再是RTC时钟* \5 O3 h* M; d* R7 M6 k8 @0 d ②MSI的PLL模式禁用: m4 t4 b4 {1 G( [ ③standby模式下,会产生唤醒, w% z% J. y% C' r$ k, G( w, ` --------------------------------------------------------------------------------------- + ?1 v4 Z# J! @* P3 F 四.总结 下面给出了HSE和LSE CSS中断向量表: 䏿åé表
1.HSE的时钟安全使用起来还是比较不错的/ @) E. [0 t3 P; J# V- z. B" @ 2.LSE的时钟安全机制触发后的程序逻辑比较难处理,触发CSS后,需要清除许多标志位,而这些标志位都在RCC_BDCR上,只有重置整个电池备份域才能够清除。还有就是待机下的唤醒,也需要考虑好程序逻辑。 " j3 k5 @+ }$ Z2 j 另外,也可以参考下https://www.stmcu.org.cn/module/forum/thread-610054-1-1.html 时钟安全系统的应用(LSE 篇),# o$ C! | F* |+ A; k1 G 5 v* u+ d8 p8 P2 T8 J$ T % \; a% r( Z U) u0 t. V; s- f , a0 h) v: h7 M0 z& w0 O' } |
| 学习了 |
|
+ N ^3 M. u/ U 扎心了,老铁,我还参考了你的关于LSE CSS的帖子 |
| 学习学习! |
|
微信公众号
手机版