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


void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);


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


void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph,FunctionalState NewState);


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


void RCC_HSICmd(FunctionalState NewState);
void RCC_LSICmd(FunctionalState NewState);
void RCC_PLLCmd(FunctionalState NewState);
void RCC_RTCCLKCmd(FunctionalState NewState);


这些函数都是用来使能相应的时钟源,比如我们要使能PLL时钟,那么就调用RCC_PLLCmd函数,函数有一个形参,和前面外设时钟的第二个参数一样,如果为ENABLE表示使能,DISABLE表示失能。
    我们再来介绍下另外一类时钟函数——时钟源和倍频因子配置函数。这类函数主要用来选择相应的时钟源和配置时钟倍频因子,比如系统时钟,它可以由HSE、HSI或者PLLCLK作为它的时钟源,具体选择哪个,就是通过时钟源配置函数实现。比如我们设置HSE作为系统时钟源,那么调用的函数就是:


RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//配置时钟源为 HSE


在前面也介绍了APB1的时钟频率是HCLK的2分频。那么可以调用下面这个函数来实现:


RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速 APB1 时钟(PCLK1)


时钟倍频因子配置函数主要用来修改系统的时钟频率。最后我们会通过一个简单LED闪烁程序来说明修改倍频因子后时钟的变化。
    最后介绍下另外一类时钟函数——外设复位函数。其函数如下:


void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);


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

STM32入门系列-STM32时钟系统,时钟使能配置函数的更多相关文章

  1. STM32入门系列-STM32时钟系统,自定义系统时钟

    在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率.在库函数中也有对时钟倍频因子配置的函数,如下: void RCC_PLLConfig(uint32_t R ...

  2. STM32入门系列-STM32时钟系统,STM32时钟树

    时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...

  3. STM32入门系列-STM32时钟系统,时钟初始化配置函数

    在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...

  4. STM32入门系列-STM32最小系统介绍

    STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...

  5. STM32入门系列-STM32外设地址映射

    片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...

  6. C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...

  7. [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...

  8. STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)

    系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...

  9. STM32—时钟树(结合系统时钟函数理解)

    时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处.心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来 ...

随机推荐

  1. APP自动化-环境安装

    环境安装: 需要安装以下工具: 1.appium server-desktop 官方网站下载地址:http://appium.io// 2.安卓ADT(Android Develop Tools) 下 ...

  2. Android 自定义Vie 对勾CheckBox

    天在美团点外卖,有一个商品推荐的条目,上面的CheckBox是自定义的,虽然我们大部分都是用图片来自定义样式.但是还是可以自定义View来绘制的,只要画一个圆和对勾即可. 最终效果 最终效果.png ...

  3. hadoop上传文件失败解决办法

    hadoop上传文件到web端hdfs显示hadoop could only be replicated to 0 nodes instead of 1解决办法 错误状态:在hadoop-2.7.2目 ...

  4. Java知识系统回顾整理01基础05控制流程08综合练习

    一.练习--黄金分割点 题目: 寻找某两个数相除,其结果 离黄金分割点 0.618最近 分母和分子不能同时为偶数 分母和分子 取值范围在[1,20] (即1到20) 要求效果: public clas ...

  5. matlab中subplot 在平铺位置创建坐标区

    来源:https://ww2.mathworks.cn/help/matlab/ref/subplot.html?searchHighlight=subplot&s_tid=doc_srcht ...

  6. Eclipse 重命名工程、包、类

    Eclipse版本 重命名工程,使用鼠标右键点击工程,选Refactor > Rename...(快捷键:Alt + Shift + R) 重命名包.类的操作与重命名工程一样. 其实,最简单的操 ...

  7. Camera插件之CinematicCamera介绍

    Camera插件之CinematicCamera 继承自PerspectiveCame 构造函数引用的PerspectiveCamera的构造函数, 代码如下 var CinematicCamera ...

  8. Linux批量查找与替换

    Linux批量查找并替换文件夹下所有文件的内容 经常要使用到 Linux的批量查找与替换,这里为大家介绍使用 sed 命令和 grep 命令的结合来实现查找文件中的内容并替换. 语法格式: sed - ...

  9. 浅谈Samsung Exynos4412处理器

    转载于:http://www.cnblogs.com/android210/archive/2013/01/16/2862349.html Topic:浅谈Samsung Exynos4412处理器( ...

  10. 实验四  用PS制作横幅广告

    实验四  用PS制作横幅广告 [实验目的] ⑴.了解广告设计应用 ⑵.学会利用PS制作简单的横幅广告 [实验条件] ⑴.个人计算机一台 ⑵.个人计算机中预装Windows7操作系统和浏览器及Photo ...