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


void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);


第一个参数是PLL时钟源选择,例程中一般采用的都是HSE作为PLL的时钟源,可以设置为RCC_PLLSource_HSE_Div1/RCC_PLLSource_HSE_Div2。第二个参数就是倍频因子值可以是RCC_PLLMul_2~RCC_PLLMul_16。方便修改系统时钟,这里自定义一个系统时钟初始化函数,将函数放在对应实验程序的main.c中。自定义系统时钟,可以通过修改PLL时钟源和倍频系数实现时钟调整具体代码如下:


void RCC_HSE_Config(u32 div,u32 pllm) //自定义系统时间(可以修改时钟)
{
    RCC_DeInit(); //将外设RCC寄存器重设为缺省值
    RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE)
    if(RCC_WaitForHSEStartUp()==SUCCESS) //等待 HSE 起振
    {
        RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)
        RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)
        RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)
        RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数
        RCC_PLLCmd(ENABLE); //使能或者失能PLL

//检查指定的RCC标志位设置与否,PLL就绪
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

//设置系统时钟(SYSCLK)
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        //返回用作系统时钟的时钟源,0x08:PLL作为系统时钟

while(RCC_GetSYSCLKSource()!=0x08);
    }

}


函数具体实现过程在程序中已经注释,大家可以参考注释。在函数中设置倍频因子时,我们给他传递了形参中的变量,这样做的好处是当你调用此函数时,只需要修改传递给函数形参内的值即可修改系统时钟,无需修改函数内部程序。在未修改系统时钟时,系统初始化后的时钟是72M,对应着此函数参数设置如下:


RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);


如果想让系统时钟为36M,只需要将参数值修改即可:


RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);


此时修改的是div这个参数值,此参数用来对HSE时钟分频系数设置,从时钟树可知,HSE可以直接流入到PLLSRC,还可以经过2分频后给PLLSRC。它的取值为RCC_PLLSource_HSE_Div1或RCC_PLLSource_HSE_Div2。
    最后我们可以通过一个LED指示灯闪烁速度来反映系统时钟修改后的效果。主函数代码如下:


int main()
{
    RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9); //36M
    LED_Init();
    while(1)
    {
        GPIO_ResetBits(LED_PORT,GPIO_Pin_0);//点亮D1
        delay(6000000);
        GPIO_SetBits(LED_PORT,GPIO_Pin_0);

delay(6000000);
    }

}


如果将div原先的1值修改为2,此时系统时钟即为36M,相当于速度慢了一倍。LED闪烁的速度也就慢了一倍。注意:不要把STM32系统时钟设置超过72M使用,否则容易崩溃。

STM32入门系列-STM32时钟系统,自定义系统时钟的更多相关文章

  1. STM32入门系列-STM32时钟系统,时钟使能配置函数

    之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...

  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. STM32入门系列-学习STM32要掌握的内容

    STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...

  7. STM32入门系列-库目录及文件介绍

    已经介绍了过了CMSIS标准,ST公司按照这个标准设计了一套基于STM32F10x的固件库,我们可以直接在ST公司的官网进行下载,现在给大家STM32最新固件库v3.5,在网盘上给大家提供了下载包,链 ...

  8. Cordova入门系列(四)自定义Cordova插件--showToast

    前三篇Cordova入门系列,简单讲解了Cordova,以及如何调用Cordova插件,今天我们讲解一下如何自己做一个插件. 自定义插件,就是自己写一些安卓java代码,然后和js代码以及配置文件,封 ...

  9. STM32入门系列-启动文件介绍

    在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...

随机推荐

  1. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  2. ios7.1发布企业证书测试包的问题

    关于升级了ios7.1之后发布企业版证书的测试包不能下载的问题,这个苹果也挺坑的,什么都不说,也不警告一下,直接就不能用了 用xcode的organizer里面的console里发现安装的时候提示这个 ...

  3. throw throws try catch finally return

    throw throw 语句用于抛出异常,例如 throw new EOFException().   throws 当使用throw 语句抛出checked 异常后,可以不用捕获异常并处理,而是使用 ...

  4. 编辑 编译 乱码 透彻 讲解 keil vscode notepad++

    1. 2.此时VSCODE内的改文件是乱码现象,进行如下操作,选择 通过编码重新打开, 选择GB 2312即可.(GB2312是兼容ANSI编码的) 详细解释一下: KEIL内是ANSI编码,VSCO ...

  5. IdentityServer4系列 | 初识基础知识点

    前言 我们现在日常生活中,会使用各式各样的应用程序,层出不穷,其中有基于网页浏览方式的应用,有基于手机端的App,甚至有基于流行的公众号和小程序等等,这些应用,我们不仅要实现各个应用的功能之外,还要考 ...

  6. DOJO dataGrid 单击单元格选中行

    onCellClick: lang.hitch(this, function(event){ //单元格单击事件 var grid = dijit.byId("__geodisa_grid& ...

  7. SDK测试操作文档

    准备所需材料 先把下列所需压缩包和文件传到虚拟机中. crypto-config压缩包存放order和peer节点所需要的证书文件(需要的是申请联盟链中的order和peer的证书文件) m2压缩包是 ...

  8. JavaScript利用函数反转数组

    要求: 给定一数组,将其元素倒序排列并输出. 代码实现: // 利用函数翻转任意数组 reverse 翻转 function reverse(arr) { var newArr = []; for ( ...

  9. appium 环境安装指引

    1.安装Appium-Python-Client Pip install Appium-Python-Client 2.安装nodejs https://nodejs.org/ 安装成功验证:node ...

  10. Linux基础入门 vim常用命令详解

    介绍 vim是一个文本编辑程序 没有菜单,只有命令,且命令繁多 命令行模式下相关命令 移动光标 ​ h: ← 左移 ​ l: → 右移 ​ j: ↓ 下移 ​ k: ↑ 上移 ​ gg: 光标移动文件 ...