关于Systick的时钟问题 对于我这个初学者来说,时钟很重要,也是最容易搞混的,所以学习这部分,我又一遍一遍的去理解STM32内的各种时钟。那么第一个我认为要明确是,STM32为了实现低功耗,当你某个外设不使用的时候,便可以将这个外设的时钟关掉。所以,相反在使用外设时,一定要把相应的外设时钟开启。 在STM32中,驱动系统时钟的时钟和系统时钟不是一个概念,通过手册介绍可以看出: 三种不同的时钟源可被用来驱动系统时钟(SYSCLK): ● HSI振荡器时钟 高速内部时钟 ● HSE振荡器时钟 高速外部时钟 ● PLL时钟 这些设备有以下2种二级时钟源: ● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。 ● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。 并且通过手册上的结构图也可以清楚地了解,以上都是用来驱动系统时钟的。也就是说HSI,HSE,PLL时钟等产生了系统时钟SYSCLK,这个时钟是最开始的。 那么,在Systick的时钟设置上有两种模式: 1,外部时钟,HCLK/8 2,内部时钟 ,HCLK 那么HCLK是从哪里来的呢,我们再看手册上的结构图,晶振时钟进来之后,来驱动系统时钟SYSCLK,SYSCLK并没有直接用来驱动外设,而是要经过AHB预分频器来调整芯片使用者的时钟,那么经过AHB预分频出来的时钟就叫做HCLK,到这里终于知道了HCLK的来历吧。那么,在系统初始化的时候,我们设置RCC时,就可以根据手册,来设置我们所需要的时钟了。 如果你仔细看数据手册的话,会发现还有个时钟,就在Systick下面,它叫做FCLK,STM32手册上说这是CM3的自由时钟(我看到这里,本来前面的时钟还搞得清楚,但是这里之后又不明白了,于是查看CM3技术参考手册),于是找到如下一段解释FCLK的话: Free running processor clock, used for sampling interrupts and clocking debug blocks. FCLK 看完也是半懂不懂得,只是知道这个时钟跟中断,睡眠唤醒有关,于是在往下面看: FCLK and HCLK are synchronous to each other. FCLK is a free running version of 这里说了HCLK与FCLK的关系,我英文不好,理解为FCLK与HCLK并需相等,而且更重要的是要同步。 我想到这里,大家应该可以初步理解一点了,我是这么认为的,HCLK是可以驱动各种外设的时钟,而这些外设由于一些需要或者操作可以产生中断等信号,这个信号要到CM3内核中进行处理,如果CM3内核的时钟与这些外设的时钟不同步,那么可以设想外设的中断请求可能会由于不同步而导致内核处理延误,中断不能得到及时响应,这要是发生在对要求实时性很高的情况下,会造成严重的后果。这是对这二者同步的理解。但是同样会问,那么直接将HCLK接过来就可以,还要FCLK做什么,还是理解的不透彻,于是在看下面的文字,看样子跟电源管理有关。而且这个FCLK在睡眠模式中是必不可少的,似乎在睡眠的时候,只有FCLK在运行,并且还要检测中断,FCLK与SLEEPING通过决定着HCLK。(还是不太懂,求高人指点) |
|