对于时钟,不了解的人可能不是很了解他的作用,稍微知道时钟的人一般都会这样解释“时钟是单片机的心脏、是单片机的脉搏、是心跳”。由此可见时钟的重要性。
时钟为应用带来了高度的灵活性,用户在运行内核和外设时可选择使用外部晶振或者使用振荡器,既可采用最高的频率,也可为以太网、USB OTG FS 以及 HS、I2S 和 SDIO 等需要特定时钟的外设保证合适的频率。
可通过多个预分频器配置 AHB 频率、高速 APB (APB2) 和低速 APB(APB1)。AHB 域的最 大频率为 168 MHz。高速 APB2 域的最大允许频率为 84 MHz。低速 APB1 域的最大允许频 率为 42 MHz。
下面看看stm32给的参考手册上的时钟树。这个是F4的系统时钟树。
这个时钟树看起来很复杂,但我们只要理解了他的工作过程即可。
在这个时钟树中,我们可以看出具体有多少的时钟、时钟的速度、时钟的分配等等。
下面看下具体工作过程
主要过程
首先我们的高速外部时钟(HES),看名字就可直到外部高速时钟是由外部所提供的其是高速的,其具体可以是有源晶振或者无源晶振所提供的时钟。而在时钟树图中我们从OSC_IN、OSC_OUT进入,然后经过分频因子进行分频/M,在进入到锁相环(PLL)环节进行倍频xN(一般为最高值336),在进入到VCO时钟进行分频/P(一般为2),然后我们会得到锁相环时钟PLLCLK,经过开关(SW)选择SUSCLK时钟(168MHZ),设置我们AHB总线分频因子为1,APB2分频因子为2,APB1分频因子为4。经过一系列的过程我们就得到我们的系统时钟=168Mhz。AHB=168MHZ,APB2=84MHZ,APB1=42MHZ。
时钟分类
1、HES
HES即为外部高速时钟(High Speed External Clock)。来源多为外部,即有源或无源晶振。有源晶振的范围大致(1-50M),无源晶振的范围大致在(4-26M)。它是由RCC_CR 时钟控制寄存器的位16:HSEON控制。
2、HSI
HSI即为高速内部时钟(Low Speed Internal Clock signal)。主要来源于芯片的内部结构。大小为16M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。他的控制主要由 RCC_CR 时钟控制寄存器的位0:HSION控制。
3、锁相环时钟PLLCLK
它的时钟来源主要是HSI或者HSE。由PLLSRC位配置。根据stm32f4给的官方参考手册上,当PLLSRC位=0时选择HSI时钟为时钟源,当PLLSRC位=1时选择HES时钟为时钟源。HSE或者HSI先经过一个分频因子M进行分频,然后再经过一个倍频因子N,然后再经过一个分频因子P,最后成为锁相环时钟。公式一般为:
PLLCLK = (HSE/M) * N / P 。控制主要由 RCC_PLLCFGR :RCC PLL 配置寄存器控制。
4、系统时钟
系统时钟(SYSCLK),F4上一般最高为168MHZ。来源主要是由HSI、HSE,PLLCLK。控制方式主要是RCC_CFGR 时钟配置寄存器的SW位进行控制,主要方式有三种选择,最经常用的时钟配置还是选择PLL作为系统时钟。
5、HCLK时钟
是AHB高速总线时钟,一般F4上最高为168M。为AHB总线的外设
提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核
提供时钟(FCLK)。它主要是由系统时钟分频(1分频)所得到。
控制方式主要是RCC_CFGR 时钟配置寄存器的HPRE位所控制的。
6、PCLK1时钟
是APB1低速总线时钟,一般最高为42MHz,为APB1总线的外设提供时钟。
来源主要是由HCLK分频得到,通常配置为4分频。而他的控制方式主要是RCC_CFGR 时钟配置寄存器的PPRE1位。主要控制分频为4分频。
PCLK2时钟
是APB高速总线时钟,一般最高为84M,为APB2总线的外设提供时钟。
来源主要是好APB的低速总线时钟一样由HCLK分频得到,通常配置为2分频。控制方式主要是 RCC_CFGR 时钟配置寄存器的PPRE2位。一般设置为2分频。
其他的时钟
I2S时钟:由外部的引脚I2S_CKIN或者PLLI2SCLK提供。
以太网PHY时钟:407没有集成PHY,只能外接PHY芯片,
比如LAN8720,那PHY时钟就由外部的PHY芯片提供,大小
为50M。
USB PHY时钟:407的USB没有集成PHY,要想实现USB高
速传输,只能外接PHY芯片,比如USB33000。那USB PHY时
钟就由外部的PHY芯片提供。
总结:其实在stm32上给的官方参考手册已经给的很全的了,我们要多看一下手册。刚开始看或许会有些懵,但要相信我们多去看、多去理解这个还是可以啃下来的。
有些我可能分析的不是很好,有不好的地方请多多指正!!!