在时钟树的讲解中我们知道,通过修改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. Chrome使用video无法正常播放MP4视频的解决方案

    H5的video标签让前端开发者用一行代码就可以实现视频和音频的播放,然而,有时候我们会突然发现,某些Mp4格式的视频在Chrome下居然无法正常播放?这究竟是什么原因呢?这篇文章主要分析了部分Mp4 ...

  2. Python-__init__ 和 __new__区别和原理

    __init__ 和 __new__区别 1. 从传递参数角度看,__init__第一个参数是实例本身, __new__传递的是类本身 2. 从执行顺序角度看,__new__方法执行在 __init_ ...

  3. Python-全局函数(内置方法、内置函数)

    Python有很多内置方法,这些都全局可用 abs() 求数值的绝对值,如果是复数则返回其模 print(abs(-17), abs(30.2), abs(3+4j)) # Python中复数表示为 ...

  4. 【漏洞复现】MSF添加ms17-010的exp脚本及攻击复现

    原文地址:https://bbs.ichunqiu.com/thread-23115-1-1.html 本来今晚在准备复现最近的CVE-2017-11882,由于本人是小白一枚,不知道这么添加msf的 ...

  5. 《C++ primer plus》第5章练习题

    1.输入两个整数,输出两个整数之间所有整数的和,包括两个整数. #include<iostream> using namespace std; int main() { int num1, ...

  6. .net core中的那些常用的日志框架(NLog篇)

    前言 咱们上回讲到,.net core中内置的Logging日志框架的使用,以及浅显的讲解,接下来,给大家介绍一个第三方日志框架(NLog). NLog简介 NLog是适用于各种.NET平台(包括.N ...

  7. mPDF的简单使用

    1. 基本使用 安装 1  在项目下composer文件中 添加 "mpdf/mpdf":"~7.1.9" 测试环境为Yii项目 其他框架composer安装大 ...

  8. npm npx cnpm yarn 的区别

    npm npm 是 Node.js 官方提供的包管理工具.用于 Node.js 包的发布.传播.依赖控制.npm 提供了命令行工具,使你可以方便地下载.安装.升级.删除包,也可以让你作为开发者发布并维 ...

  9. python接口测试之日志功能

    之前在简书中看了一篇关于日志功能的文档,供大家参考:https://www.jianshu.com/p/62f7b49b41e7 Python通过logging模块提供日志功能,所以直接导入即可 im ...

  10. 用 C 语言游戏编程开发!果然最担心的事又发生了!

    30了.我要怎么办,老了.人就像一头小毛驴,方向都是牵着的人定的. 这个项目从去年开始的,一个手机游戏,当时接这个项目的时候其实没有太多考虑,我一向都喜欢打肿脸充胖子的,好面子,人家找上门来,不能不给 ...