STM32F407 HAL库时钟配置的浅薄理解

本文介绍了STM32F407的时钟配置,包括锁相环的工作原理、不同时钟源的选择与分频、如何使用HAL库启用时钟以及配置Flash等待周期。提醒读者注意时钟频率的正确使用以避免错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:本文章不细究原理,只浅薄的讲解如何配置时钟树以及如何使用,如有错误,请及时指出,感谢!

首先,STM32F407ZG配置的最大频率为168MHZ,但实际上,其本身并不能达到168MHZ,而是通过外部晶振的倍频和分频来达到168MHZ。

这里首先引入一个概念----------锁相环。锁相环,简单来说,就是史蒂夫罗杰斯进行了强化,变成了拿着振金盾牌的美国队长,又高又壮又强。频率也是同理,当频率小于设定值时,锁相环就会工作,使它达到预期值,进而输出。(由于篇幅问题,仅概述,感兴趣可以自行了解相关的概念与工作原理)

对于STM32F407而言,它共有五个时钟源,分别是HSE(高速外部振荡器),LSE(低速外部振荡器),HSI(高速内部振荡器),LSI(低速内部振荡器),RTC(时钟源)。RTC时钟源可以使用上述其它四种时钟源分频后的时钟,RTC是一个实时时钟,可以简单理解成32位定时器,断电后数据可以保存,这里不细究。

而在STM32F407中,有许多的时钟线,这里给出时钟树的简图。

截取STM32_CUBE中的时钟树,我们接下来逐一分析。

input frequency,输入频率,即外部晶振,可接受的范围为4-26MHZ,一般设置为8MHZ,值得注意的是,input frequency的值越大,则微控制器处理速度越快,但同时,耗电也会更多。

输入频率通过HSE进入到main PLL(上文所提到的锁相环),在这一步,频率首先分频,以8MHZ为例,其先分频/8,变为1MHZ。接着倍频*336,变为336MHZ。往下走,频率分成两条线路,一条分频/2,变为168MHZ后,进入时钟总线;而另一条分频/4,直接进入单独的48MHZ时钟。

而在开头分频变为1MHZ的频率,如下图所示,进入了PPL,倍频*192,变成192MHZ后,分频/2,变为96MHZ,最后进入I2S时钟。

我们将目光转回时钟总线,在这里,168MHZ沿两条线前进,首先被赋予外部时钟,接着预分频/1,变为168MHZ后,依次赋予给不同的时钟/定时器,到这里,它还会进行不同程度的倍频和分频,相信大家现在已经可以理解了,我就不细讲了。需要注意的是,有些时钟有最大允许值,如APB1 peripheral clocks,该时钟的最大允许值为42MHZ,注意不要超过允许值。

那么最终,各个时钟都获得了相应的时钟频率,在进行PWM或者定时器计算的时候,一定要注意使用对应的时钟频率,不然结果肯定是不对的。

那么接下来,我们来看看HAL库的相关程序代码。   

使能对应的时钟

     

OscillatorType是选择外部的哪个振荡器,如果要配置多个振荡器,则用竖线“|”隔开。

PPL结构体调用

 配置FLASH的等待周期,由于F4系统时钟比访问FLASH的时钟更快,如果要有系统时钟访问FLASH则需要进行等待,一共是有0~15,16个选择。但是在有些芯片中,可能是0~7,那么需要查询FLASH_ACR寄存器LATENCY位域

具体配置方法

这篇文章就到这里,讲的比较粗糙,因为HAL库仅仅只是刚入门,以后学深入会继续细讲一些寄存器相关的内容,希望大家点个关注。有问题请私信或者评论区指出,我看到了都会回复。感谢阅读,希望这篇文章对您学习有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值