STM32F407时钟设置

2019-06-13来源: eefocus关键字:STM32F407  时钟设置  RCC

这里我们写一个RCC配置函数来说明各函数的用途,其中HSE = 8MHz。

 

/**

  *  @说明  配置STM32F407的时钟系统

  * @参数  无

  * @返回  无

  * @说明  void Clock_Config(void) 按如下表格配置时钟

  *

*==================================================================

*        Supported STM32F4xx device revision    | Rev A

        *-----------------------------------------------------------------------------

*        System Clock source                             | PLL (HSE)

*-----------------------------------------------------------------------------

        *        SYSCLK(Hz)                              | 168000000

        *-----------------------------------------------------------------------------

*        HCLK(Hz)                                | 168000000

        *-----------------------------------------------------------------------------

*        AHB Prescaler                                       | 1

*-----------------------------------------------------------------------------

*        APB1 Prescaler                                  | 4

*-----------------------------------------------------------------------------

*        APB2 Prescaler                                | 2

*-----------------------------------------------------------------------------

*        HSE Frequency(Hz)                           | 8000000                                    

*-----------------------------------------------------------------------------

 *        PLL_M                                 |8

*-----------------------------------------------------------------------------

*        PLL_N                                   | 336

*-----------------------------------------------------------------------------

        *        PLL_P                                       | 2

*-----------------------------------------------------------------------------

*        PLL_Q                                  |7

*===================================================================

*/

void Clock_Config(void){

 

     ErrorStatus        State;

     uint32_t           PLL_M;      

     uint32_t           PLL_N;

     uint32_t           PLL_P;

     uint32_t           PLL_Q;

 

    /*配置前将所有RCC重置为初始值*/

     RCC_DeInit();

 

     /*这里选择 外部晶振(HSE)作为 时钟源,因此首先打开外部晶振*/

     RCC_HSEConfig(RCC_HSE_ON);

     /*等待外部晶振进入稳定状态*/

     while( RCC_WaitForHSEStartUp() != SUCCESS );

 

     /*

     **我们要选择PLL时钟作为系统时钟,因此这里先要对PLL时钟进行配置

     */

 

     /*选择外部晶振作为PLL的时钟源*/

    

     /* 到这一步为止,已有 HSE_VALUE = 8 MHz.

        PLL_VCO input clock = (HSE_VALUE or HSI_VALUE / PLL_M),

        根据文档,这个值被建议在 1~2MHz,因此我们令 PLL_M = 8,

        即 PLL_VCO input clock = 1MHz */

     PLL_M         =    8;  

    

     /* 到这一步为止,已有 PLL_VCO input clock = 1 MHz.

        PLL_VCO output clock = (PLL_VCO input clock) * PLL_N,

        这个值要用来计算系统时钟,我们 令 PLL_N = 336,

        即 PLL_VCO output clock = 336 MHz.*/       

     PLL_N        =    336;

 

     /* 到这一步为止,已有 PLL_VCO output clock = 336 MHz.

        System Clock = (PLL_VCO output clock)/PLL_P ,

        因为我们要 SystemClock = 168 Mhz,因此令 PLL_P = 2.

        */

     PLL_P         =    2;

 

     /*这个系数用来配置SD卡读写,USB等功能,暂时不用,根据文档,暂时先设为7*/

     PLL_Q         =    7;

    

     /* 配置PLL并将其使能,获得 168Mhz 的 System Clock 时钟*/

     RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q);

     RCC_PLLCmd(ENABLE);

 

     /*到了这一步,我们已经配置好了PLL时钟。下面我们配置Syetem Clock*/

     /*选择PLL时钟作为系统时钟源*/

     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

 

    

 

 

/*到了这一步,我们已经配置好了系统时钟,频率为 168MHz. 下面我们可以对 AHB,APB,外设等的 时钟进行配置*/

     /*时钟的结构请参考用户手册*/

 

     /*首先配置 AHB时钟(HCLK). 为了获得较高的频率,我们对 SYSCLK 1分频,得到HCLK*/

     RCC_HCLKConfig(RCC_HCLK_Div1);

 

     /*APBx时钟(PCLK)由AHB时钟(HCLK)分频得到,下面我们配置 PCLK*/

 

     /*APB1时钟配置. 4分频,即 PCLK1 = 42 MHz*/

     RCC_PCLK1Config(RCC_HCLK_Div4);

 

     /*APB2时钟配置. 2分频,即 PCLK2 = 84 MHz*/

     RCC_PCLK2Config(RCC_HCLK_Div2);

 

/*****函数结束******/

 

/*以上函数可以大体上说明这些库函数的作用*/

}

 

对于 RCC_PLLConfig();函数,大家可能会迷惑。

其函数原型为:

void RCC_PLLConfig(uint32_t  RCC_PLLSource,

                   uint32_t  PLLM,

                   uint32_t  PLLN,

                   uint32_t  PLLP,

                   uint32_t  PLLQ);

 

迷惑的地方肯定在于后面 4个参数 PLLM / PLLN / PLLP / PLLQ.

 

在库函数源文件 system_stm32f4xx.c 中可以找到这 4个参数的说明,请看下图注释部分:

 

(下面的是从 库函数源文件 stm32f4xx_rcc.c 中找到的。其他函数可以直接去看库函数,注释非常详细)

 

/**

  * @brief  Configures the main PLL clock source, multiplication and division factors.

@简介 配置主PLL时钟源,以及分频因子

[1] [2]

关键字:STM32F407  时钟设置  RCC

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic464498.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F4系统时钟设置之二
下一篇:STM32时钟配置方法详解

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库说明文档《stm32f4xx_dsp_stdperiph_lib_um.chm》以及《Proprietary code read-out protection on microcontrollers》。51.1 选项字节与读写保护在实际发布的产品中,在STM32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商即可利用该代码文件山寨产品。为此,STM32芯片提供了多种方式保护内部FLASH的程序不被非法读取,但在默认情况下该保护功能
发表于 2019-09-20
第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。关于开发板配套的OV2640摄像头参数可查阅《ov2640datasheet》配套资料获知。STM32F4芯片具有浮点运算单元,适合对图像信息使用DSP进行基本的图像处理,其处理速度比传统的8、16位机快得多,而且它还具有与摄像头通讯的专用DCMI接口,所以使用它驱动摄像头采集图像信息并进行基本的加工处理非常适合。本章讲解如何使用STM32驱动OV2640型号的摄像头。45.1 摄像头简介在各类信息中,图像含有最丰富的信息,作为机器视觉领域的核心部件,摄像头被广泛地应用在
发表于 2019-09-20
第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

第43章 RTC—实时时钟—零死角玩转STM32-F429系列

函数对每个外设都建立了一个初始化结构体,比如RTC_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如RTC_Init()调用,这些配置好的参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如。初始化结构体定义在stm32f4xx_rtc.h头文件中,初始化库函数定义在stm32f4xx_rtc.c文件中,编程时我们可以结合这两个文件内注释使用。RTC初始化结构体用来设置RTC小时的格式和RTC_CLK的分频系数。代码 431 RTC初始化结构体1 typedef st
发表于 2019-09-20
第43章 RTC—实时时钟—零死角玩转STM32-F429系列

第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。关于开发板配套的OV5640摄像头参数可查阅《ov5640datasheet》配套资料获知。STM32F4芯片具有浮点运算单元,适合对图像信息使用DSP进行基本的图像处理,其处理速度比传统的8、16位机快得多,而且它还具有与摄像头通讯的专用DCMI接口,所以使用它驱动摄像头采集图像信息并进行基本的加工处理非常适合。本章讲解如何使用STM32驱动OV5640型号的摄像头。46.1 摄像头简介在各类信息中,图像含有最丰富的信息,作为机器视觉领域的核心部件,摄像头被广泛地应用在
发表于 2019-09-20
第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

第40章 CAN—通讯实验—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册2》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。若对CAN通讯协议不了解,可先阅读《CAN总线入门》、《CAN-bus规范》文档内容学习。关于实验板上的CAN收发器可查阅《TJA1050》文档了解。40.1 CAN协议简介CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有
发表于 2019-09-20
第40章 CAN—通讯实验—零死角玩转STM32-F429系列

第31章 TIM—基本定时器—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。学习本章时,配合《STM32F4xx 中文参考手册》基本定时器章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。特别说明,本书内容是以STM32F42x系列控制器资源讲解。31.1 TIM简介定时器(Timer)最基本的功能就是定时了,比如定时发送USART数据、定时采集AD数据等等。如果把定时器与GPIO结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产PWM控制电机状态是工业控制普遍方法,这方面知识非常有必要深入
发表于 2019-09-20
第31章 TIM—基本定时器—零死角玩转STM32-F429系列

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved