STM32F107的时钟设置

STM32的库函数好像只有外部8M倍频到72M,现在用的板子外部25M的晶振,如何倍频到72M呢?

解决办法: STM32F107的时钟分4步的:

1> 25MHz先除5分频到5MHz;

2> 再8倍频到40MHz;

3> 再5分频到8MHz;

4> 再9倍频到72MHz.

STM32F103和STM32F105/STM32F107的RCC设置是不一样的,仔细查ST的参考手册,很容易得到答案的,新版的库中,有STM32F105/STM32F107的时钟设置代码,通过全局宏来选定的。看一下《STM32F10x.h》中的开头部分的宏判断。

ErrorStatus HSEStartUpStatus;

RCC_DeInit();

RCC_HSEConfig(RCC_HSE_ON);

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus== SUCCESS)

{

    RCC_HCLKConfig(RCC_SYSCLK_Div1);

    RCC_PCLK2Config(RCC_HCLK_Div1);

    RCC_PCLK1Config(RCC_HCLK_Div2);

    RCC_ADCCLKConfig(RCC_PCLK2_Div4);

#ifndef STM32F10X_CL 

    RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

#else

    RCC_PREDIV2Config(RCC_PREDIV2_Div5);

    RCC_PLL2Config(RCC_PLL2Mul_8);

   RCC_PLL2Cmd(ENABLE);

    while(RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET)

    {}

    RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2,RCC_PREDIV1_Div5);

    RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_9);

    RCC_PLL3Config(RCC_PLL3Mul_11);

    RCC_PLL3Cmd(ENABLE);   

    while(RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET)

    {}

    RCC_I2S3CLKConfig(RCC_I2S3CLKSource_PLL3_VCO);

    RCC_I2S2CLKConfig(RCC_I2S2CLKSource_PLL3_VCO); 

#endif

    RCC_PLLCmd(ENABLE);

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET)

    {

    }

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while(RCC_GetSYSCLKSource()!= 0x08)

    {

    }

}

函数库的不断升级,到3.0以上时,我们就不用再这样编写时钟设置了,我们只要做如下两部即可:

第一个: system_stm32f10x.c 中 #define SYSCLK_FREQ_72MHz 72000000

第二个:调用SystemInit()

说明:在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。

文件开头就有一个这样的定义:

//#define SYSCLK_FREQ_HSE    HSE_Value

//#define SYSCLK_FREQ_20MHz 20000000

//#define SYSCLK_FREQ_36MHz 36000000

//#define SYSCLK_FREQ_48MHz 48000000

//#define SYSCLK_FREQ_56MHz 56000000

#define SYSCLK_FREQ_72MHz 72000000

ST 官方推荐的外接晶振是 8M,所以库函数的设置都是假定你的硬件已经接了 8M 晶振来运算的.以上东西就是默认晶振 8M 的时候,推荐的 CPU 频率选择.在这里选择了:

#define SYSCLK_FREQ_72MHz 72000000

也就是103系列能跑到的最大值72M

然后这个 C文件继续往下看

#elif defined SYSCLK_FREQ_72MHz

const uint32_t SystemFrequency         = SYSCLK_FREQ_72MHz;

const uint32_t SystemFrequency_SysClk   = SYSCLK_FREQ_72MHz;

const uint32_t SystemFrequency_AHBClk   = SYSCLK_FREQ_72MHz;

const uint32_t SystemFrequency_APB1Clk  = (SYSCLK_FREQ_72MHz/2);

const uint32_t SystemFrequency_APB2Clk  = SYSCLK_FREQ_72MHz;

这就是在定义了CPU跑72M的时候,各个系统的速度了.他们分别是:硬件频率,系统时钟,AHB总线频率,APB1总线频率,APB2总线频率.再往下看,看到这个了:

#elif defined SYSCLK_FREQ_72MHz

static void SetSysClockTo72(void);

这就是定义 72M 的时候,设置时钟的函数.这个函数被 SetSysClock ()函数调用,而SetSysClock ()函数则是被 SystemInit()函数调用.最后 SystemInit()函数,就是被你调用的了。

所以设置系统时钟的流程就是: 首先用户程序调用 SystemInit()函数,这是一个库函数,然后 SystemInit()函数里面,进行了一些寄存器必要的初始化后,就调用 SetSysClock()函数. SetSysClock()函数根据那个#define SYSCLK_FREQ_72MHz 72000000 的宏定义,知道了要调用SetSysClockTo72()这个函数,于是,就一堆麻烦而复杂的设置~!@#$%^然后,CPU跑起来了,而且速度是 72M.

STM32F107的时钟设置相关推荐

  1. STM32F107的时钟设置由25M修改成8M

    1.首先找到stm32f10x.h, system_stm32f10x.c这两个文件: 2. system_stm32f10x.c修改 #if defined (STM32F10X_LD_VL) || ...

  2. pic单片机内部时钟校准c语言,实例讲解PIC单片机的时钟设置

    什么时钟? 首先我们先讲讲什么是时钟.时钟就是单片机的心脏.每跳动一下.整个单片机的各个电路就同步的动作一下.就好像我们做广播体操的时候 广播上喊的节拍1234 2234 3234....然后我们全部 ...

  3. esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树

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

  4. 6410的系统时钟设置(中)---相关寄存器介绍

    上篇中已经详细分析了6410时钟系统的结构,现在就介绍下几个与时钟设置相关的寄存器. 1.APLL_LOCK.MPLL_LOCK.EPLL_LOCK 这三个寄存器的低十六位分别表示APLL.MPLL. ...

  5. 6410的系统时钟设置(上)---6410时钟控制逻辑框架分析

    本文主要介绍6410内核和AHB.APB总线的时钟设置. 6410的时钟逻辑结构还是比较清晰的,配置起来并不难(曾让笔者极度抓狂的是Freescale Kinetis系列的片子,系统时钟配置起来很麻烦 ...

  6. 汇编实现时钟设置代码理解

    汇编实现时钟设置代码理解 下面的笔记是我在看<朱老师物联网大讲堂>(www.zhulaoshi.org)之后所做的笔记,只是大概根据自己看了视频与朱老师上课做的笔记而有的理解记录下来. 写 ...

  7. STM32f107 CAN滤波器设置

    STM32f107 CAN滤波器设置 F107有CAN1.CAN2两路,其滤波设置类似 stm32f10x系列CAN滤波器: 两种模式:列表模式.屏蔽位模式 有分组**,*CAN1:0->13组 ...

  8. stm32l476时钟设置

    对于32初学者来说,时钟的问题很令人头疼 对于我来说,就和当初学python时编码的问题一样,好像无论怎么编码解码都是乱码似的 这只简单介绍时钟的计算方法,关于具体的时钟设置详细介绍还是自行查阅,主要 ...

  9. STM32系统时钟设置(标准库)

    1.STM32F407时钟树 2.系统时钟相关的结构 HSE高速外部时钟信号 锁相环PLL 锁相环的主要作用就是对时钟进行倍频,然后把时钟输出到各个功能部件.PLL有两个,一个主PLL,另一个是专用的 ...

  10. 第三章、Tiny4412 U-BOOT移植三 时钟设置【转】

    本文转自:http://blog.csdn.net/eshing/article/details/37521789 这一章说明配置时钟频率基本原理 OK,接着说,这次先讲讲CPU的系统时钟.U-BOO ...

最新文章

  1. Excel访问局域网中OLAP方案
  2. 可变车道怎么走不违章_可变车道怎么才能正确通行?老司机来告诉你什么才是正确的走法。...
  3. python背景怎么自定义铃声_python爬取手机铃声
  4. Appboy 基于 MongoDB 的数据密集型实践
  5. 国密算法SM3-java实现
  6. MySQL 创建联结
  7. Arduino手自两用蓝牙避障小车
  8. IDEA代码文件的版权(copyright)信息配置
  9. 海康摄像头之FTP服务器搭建及使用
  10. bigworld源码分析(1)—— 研究bigworld的意义和目标
  11. 一个精明主妇写的省钱过日子的好贴
  12. 资源宝分享wordpress主题后门检测清理技巧
  13. July大神交大读书会子atoi
  14. 编译原理实验二 自上而下的语法分析器(算术表达式)
  15. 将String字符串转化为int
  16. 安装oaj2se出现问题
  17. 牛客网笔试系统ACM模式下的程序输入格式总结
  18. 研一学习生活的总结~
  19. 西安思源学院计算机网络技术专业,西安思源学院特色专业:计算机网络技术
  20. 视觉设计师跟平面设计_用户体验设计师应了解的6条视觉设计原则

热门文章

  1. 计算软件介绍siesta、vasp、wien2k、PWSCF、Materials Studio
  2. gp3688写频线制作_摩托罗拉GP3688对讲机写频软件(摩托罗拉对讲机写频工具) 官方版...
  3. 【必备知识】摄像机标定基础理论
  4. cad黑色背景变成白色_CAD操作很难记?记住了又易混淆?那就看这里!
  5. shark恒破解笔记2-绕过自校验
  6. Android 常用颜色值及半透明效果配置
  7. cocos creator人物动画切换控制
  8. 网络开盘选房微信抢房软件下载及使用教程
  9. 弹性力学经典解法与有限元法的不同特点
  10. 基于matlab的QPSK系统仿真及应用