玩转STM32(18)理解SetSysClock函数

本文详细探讨了STM32中的SetSysClock函数,该函数用于设置CPU工作频率,确保STM32能高效运行。通过分析源码,解释了static关键字的作用,以及如何根据不同STM32型号配置时钟。函数内部涉及开启HSE、配置PLL以及切换系统时钟源至主PLL,确保外部时钟成为CPU的主要频率。

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

前面理解SystemInit函数时,发现里面调用了SetSysClock函数,那么这个函数有什么用呢?里面的代码到底又干了什么事情呢?现在就来仔细地分析这个函数,以便掌握每一个细节,了解事物的来龙去脉。并且这个函数是用户必须了解的函数,为什么这样说呢?因为这个函数要设置CPU工作的频率,也就是说这个函数里设置了CPU到底运行多快的关键。前面我们知道CPU复位之后,默认是运行内部的时钟频率,那是比较低速运行的,如果不做这一步的修改,意味着CPU永远运行不了高速,达不到高效利用STM32的CPU。

 

首先来看到这个函数定义,它是定义在文件system_stm32f4xx.c里,它是被安排用户目录User下面,前面也说过,在这个目录之下的文件,用户都可以修改的文件,也是用户要关心的文件。当你找到这个函数时,它是这样定义的:

static void SetSysClock(void)

这个函数与SystemInit函数的定义有点区别,不知道你发现了没有?对,在这个函数前面多了一个关键字static声明,为什么需要这个关键字呢?不用这个关键字声明行不行?要理解这个关键字,那么就得回忆一下C语言里关于static函数与普通函数的区别了,大体意思如下:

用static修饰的函数,限定在本源码文件中使用,不能被这个源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它文件调用该函数。在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通函数的定义和声明默认情况下是extern的,但静态函数只是在声明它的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:

  <1> 其它文件中可以定义相同名字的函数,不会发生冲突。

<2> 静态函数不能被其他文件所用。

看完这段文字之后,你也许会发现C语言里的静态函数与C++里的私有函数很像,达到的目的是一样的。在这里SetSysClock函数,由于限制此函数在文件system_stm32f4xx.c里使用,不能被别的文件里调用,所以添加了静态声明。

#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)|| defined(STM32F469_479xx)

这一行代码,主要用来判断不同的STM32的芯片类型,在这里只适用于STM32F40X、STM32F41X、STM32F427、STM32F437、STM32F429、STM32F439、STM32F412、STM32F413、STM32F423、STM32F446、STM32F469、STM32F479等类型。在我这个工程里,是定义了这个宏STM32F40_41xxx的,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值