你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32入门系列-STM32时钟系统,时钟使能配置函数

[复制链接]
STMCU小助手 发布时间:2022-7-1 12:56
   之前的推文中说到,当使用一个外设时,必须先使能它的时钟。怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考《STM32F10x中文参考手册》“复位和时钟控制(RCC)”章节,其中有详细的寄存器介绍。固件库已经把时钟相关寄存器的使能配置都封装好,放在stm32f10x_rcc.c和stm32f10x_rcc.h中。只需要打开stm32f10x_rcc.h文件,会发现有很多的宏定义和时钟使能函数的声明。这些时钟函数可大致分为三类。一类是外设时钟使能函数,一类是时钟源和倍频因子配置函数,还有一类是外设复位函数。当然还有几个获取时钟源配置的函数。下面就来简单介绍下这些函数的使用。
) ]8 k% l, L8 m- W    首先看一下时钟使能函数,时钟使能函数包括外设时钟使能和时钟源使能。外设时钟使能相关函数如下:

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
) }  B% J6 y8 ~void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
8 Q( K1 n% {6 uvoid RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); . Q) T4 l4 X$ Y: O

    上面3个时钟使能函数也正是STM32的3条总线(这个在前面介绍存储器与寄存器章节讲过)。由于STM32的外设都是挂接在AHB和APB总线上的,所以要使能外设时钟,也就是使能对应外设所挂接的总线时钟。比如GPIO外设它是挂接在APB2总线上的,如果使用GPIO外设,就需要先使能APB2总线时钟,使能时钟代码如下。, N( j* U7 i& x9 }0 _# O* E" \

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph,FunctionalState NewState); 3 c+ b" Y: i1 G6 z" c" C$ x6 C

    要想哪个外设挂接在哪个总线上呢,可以通过STM32中文参考手册查找,还可以在固件库stm32f10x_rcc.h文件中查找。其实这些知识在存储器与寄存器推文中已经介绍过,大家可往回翻看下。* \, P- F) I2 n
    外设时钟使能函数有两个形参,第一个是你所使用的外设所挂接的时钟,第二个是选择你用的外设时钟使能还是失能。比如我们要使能端口GPIOC,那么第一个传递的参数是:RCC_APB2Periph_GPIOC宏,第二个传递的参数是ENABLE使能。从第一个参数名来看也非常好理解,RCC表示复位和时钟控制器,APB2表示GPIOC是挂接在APB2总线上,Periph表示外设,后面的GPIOC表示我们使能的是GPIOC端口。第二个参数ENABLE表示使能。假如使能GPIOA端口时钟,那么只需要修改第一个参数值即可,按照刚才介绍的函数命名规律,无需查找即可写出RCC_APB2Periph_GPIOA。其他的外设初始化方法类似。0 `. S" Z+ }' N2 B
    下面介绍下时钟源使能函数,通过前面的讲解,知道STM32有5大类时钟源, 这里我们只挑几个重要的时钟源使能函数介绍,如下:
  y' v& w. ]: g8 @$ j$ s) E

void RCC_HSICmd(FunctionalState NewState);$ C$ D& o0 U4 ~( j9 J8 r; v- J( N1 i
void RCC_LSICmd(FunctionalState NewState);
7 V2 E1 e9 ?" n+ [- {  Y* M( O. D9 nvoid RCC_PLLCmd(FunctionalState NewState);
# Z# @! q+ `( {4 v7 F3 ~0 yvoid RCC_RTCCLKCmd(FunctionalState NewState);
3 ]( f* |' y4 U) N

    这些函数都是用来使能相应的时钟源,比如我们要使能PLL时钟,那么就调用RCC_PLLCmd函数,函数有一个形参,和前面外设时钟的第二个参数一样,如果为ENABLE表示使能,DISABLE表示失能。
- I% S; L" c4 q5 n    我们再来介绍下另外一类时钟函数——时钟源和倍频因子配置函数。这类函数主要用来选择相应的时钟源和配置时钟倍频因子,比如系统时钟,它可以由HSE、HSI或者PLLCLK作为它的时钟源,具体选择哪个,就是通过时钟源配置函数实现。比如我们设置HSE作为系统时钟源,那么调用的函数就是:
, }2 y  t; d, P/ u1 A4 Y, m! ]

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//配置时钟源为 HSE" R  u/ A- b/ g. J7 B. k! u, [

    在前面也介绍了APB1的时钟频率是HCLK的2分频。那么可以调用下面这个函数来实现:
% a2 z( O/ P0 _! T* o4 L- C

RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速 APB1 时钟(PCLK1)
: }! x' m6 v, t0 a

    时钟倍频因子配置函数主要用来修改系统的时钟频率。最后我们会通过一个简单LED闪烁程序来说明修改倍频因子后时钟的变化。, _$ W) j: _* [# w
    最后介绍下另外一类时钟函数——外设复位函数。其函数如下:
; z. C; [& ?; w+ U+ R& C

void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);' h  B; e9 @1 t4 T0 Y2 e
void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
. [" J9 w2 S) m. X+ B

    在STM32F10x高容量的芯片中没有RCC_AHBPeriphResetCmd函数。这类函数与前面讲解的外设时钟使能函数用法一样,只不过外设时钟使能函数是用于使能外设时钟,而这类函数是用于外设复位,从函数名也可以区分出来。其他的函数大家可以自行查找其功能和用法。

3 C. ]) [2 n! D' d
赞 收藏 评论0 发布时间:2022-7-1 12:56

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版