天天看点

STM32F4时钟树

时钟是单片机的心脏,重要性不言而喻,STM32F4的时钟树是比较复杂的,所以不是一言两语能写清楚的,我只简单的描述下时钟来源,详细知识需要去看正点原子的视频讲解。

STM32F4时钟树
STM32F4时钟树

整个时钟来源有五个:

1.LSI(Low Speed Interior)低速内部时钟,是由内部RC振荡器产生的不怎么精确的时钟,主要用来给看门狗提供时钟频率。看门狗的作用可以简单理解是为了防止程序跑飞了,就是检测是系统故障的一个功能。

2.LSE(Low Speed Exterior)低速外部时钟,是外接32MHz的晶振。主要是给RTC提供时钟频率。RTC是实时时钟,功能和定时器差不多。

3.HSI高速内部时钟,由RC振荡器产生。

4.HSE高速外部时钟,由外接晶振产生,频率在4-26MHz之内。

5.PLLCLK(Phase Loked Loop)锁相环时钟,至于锁相环是干嘛用的,百度讲的比我清楚:锁相环百科

那么为什么要这么多时钟源干嘛?主要还是为了降低功耗,因为好多外设并不需要那么高的频率。

系统时钟主要是由主PLL产生,如图

STM32F4时钟树

上面的为主PLL,时钟来源有HSI和HSE。一般选择来源是HSE外接4-26MHz的晶振,具体是多少要看板子的电路图,然后还要修改库函数里的默认的频率。系统时钟频率虽然说最高是168MHz,但是已经定死了默认是168MHz,不好修改。

STM32F4时钟树

所以有个公式SYSCLK=168=f/M*(N/P),f为PLL输出频率,M为HSI或HSE分频数,N和P为锁相环内部倍频和分频数,N为336,P为2。由于PLL时钟来源我们选择的是HSE,根据我们给的晶振来的,所以要在system_stm32f4xx.c文件里面只需要修改M的值为你的HSE晶振的值即可,一般为8MHz晶振所以M为8,这样sysclk=8M/8*(336/2)=168M。