时钟源关系初解

来源:互联网 发布:大盘指数算法 编辑:程序博客网 时间:2024/05/17 04:11

最近发现自己对时钟的各种关系不是很清晰,所以在这里初步的顺一下。以STM32F4为例,大概都差不多。

STM32F4有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL。从名字上看出HSI和HSE是高速时钟,HSI是高速内部时钟,HSE是高速外部时钟,同样的LSI是低速内部时钟,LSE是低速内部时钟源。外部时钟源就是从外面接晶振获取的时钟源。然后就说说每个时钟源的大概频率和作用位置。


LSI频率32kHz左右,供给独立看门口和自动唤醒单元使用;

LSE接32.768kHz晶振,主要是RTC(实时时钟)的时钟源;

HSE接4M~26MHz晶振,我手上的这块接的8MHz,主要是为了分频的时候还是整数;

HSI频率16MHz,可以直接作为系统时钟或者PLL输入;

PLL是锁相环倍频输出,分为主PLL和专用PLL:

1)主PLL由HSE或HSI提供时钟信号,并且具有两个不同的输出时钟:

第一个输出PLLP用于生成高速的系统时钟,最高168MHz;

第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz)、随机数发生器和SDIO的时钟。

2)专用时钟PLL,也可以说是PLLI2S,用于生成精确时钟,从而在I2S接口实现高品质的音频输出。


至于PLLP的计算方法,简单说说就是PLL时钟的时钟源经过一个分频器(M),再经过一个倍频器(N),最后再经过一个分频器(P或Q),就出来PLLP或者PLLQ了。

例如HSE接外部晶振为8MHz,设置M=8,N=336,P=2,得出PLLP就为8MHz*N/(M*P)=168MHz。

如果SYSCLK时钟源是PLL,而且PLL的时钟源是HSE的话,那SYSCLK频率就是168MHz了。

如果是选的其它时钟源的话,计算方法也一样。


接下来就是SYSCLK系统时钟下面的各种PTP时钟、AHB时钟、APB2高速时钟、APB1低速时钟了。其中以太网PTP时钟使用系统时钟,其它三都是经过系统时钟分频得来,然后AHB最大时钟频率为168MHz,APB2为84MHz,APB1为42MHz。

AHB和APB都是ARM公司推出的AMBA片上总线的一部分,AHB为系统总线,APB为外部总线,简单来说,AHB和APB都是负责各个部分之间的连接,AHB负责高性能模块之间的连接,如CPU、DMA、DSP等,APB负责低带宽的外设连接,如UART、IIC、GPIO等,外设可能挂在在APB1或者APB2下,具体要看芯片使用手册。