历史上的今天
返回首页

历史上的今天

今天是:2025年08月07日(星期四)

正在发生

2019年08月07日 | STM32F407时钟设置

2019-08-07 来源:eefocus

这里我们写一个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时钟源,以及分频因子          (PLL不止一个,还有一个用来为音频处理提供高质量时钟)

  * @note   This function must be used only when the main PLL is disabled.

  * @注意   这个函数只能在主PLL失能时才能使用

  * @param  RCC_PLLSource: specifies the PLL entry clock source.

   @参数    RCC_PLLSource:选择PLL时钟源

  *          This parameter can be one of the following values:

这个参数可以是如下值:

  *            @arg RCC_PLLSource_HSI: HSI oscillator clock selected as PLL clock entry

 选择HSI作为PLL时钟源

  *            @arg RCC_PLLSource_HSE: HSE oscillator clock selected as PLL clock entry

选择HSE作为PLL时钟源

  * @note   This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. 

  *  

  * @param  PLLM: specifies the division factor for PLL VCO input clock

   @参数    PLLM:设置 PLL VCO 输入时钟的 除法因子(division factor)

  *          This parameter must be a number between 0 and 63.

推荐阅读

史海拾趣

铨力(ALLPOWER)公司的发展小趣事

随着市场竞争的加剧,铨力公司意识到单纯依靠太阳能电源产品已无法满足市场需求。于是,公司开始着手研发更为先进、高效的能源技术。经过多次试验和改进,铨力成功突破了技术瓶颈,研发出了新一代高效能、低成本的太阳能电池板。这一技术的突破不仅提升了产品的竞争力,也为公司打开了更广阔的市场空间。

Efficient Power Conversion公司的发展小趣事

随着EPC公司氮化镓技术的不断完善和成熟,其产品开始受到市场的广泛认可。无线电源传送、全自动汽车、高速移动通信等领域的企业纷纷采用EPC公司的氮化镓功率半导体器件,以提高其产品的性能和效率。EPC公司的市场份额逐渐扩大,成为氮化镓功率管理技术领域的领军企业。

ELINA INDEK公司的发展小趣事

随着技术的成熟和市场的扩大,因美纳开始积极拓展全球市场。公司通过与全球各地的经销商建立合作关系,将产品销往世界各地。同时,因美纳还在多个国家和地区设立了研发中心和生产基地,以便更好地满足当地市场的需求。这种全球化战略不仅为公司带来了更多的市场机会,也提高了公司的国际影响力。

(注意:由于篇幅限制,此处仅提供三个故事的梗概,每个故事的实际字数可能稍少于500字。同时,由于"ELINA INDEK"并非真实存在的公司,因此以下故事均基于因美纳公司的发展情况进行编写。)

A/D Electronics Inc公司的发展小趣事

A/D Electronics Inc深知人才是企业发展的核心力量。因此,公司高度重视研发团队的建设和人才培养。通过引进国内外优秀人才和加大研发投入,公司不断提升研发团队的实力和创新能力。同时,公司还建立了完善的培训体系,为员工提供持续的学习和成长机会,激发了员工的创造力和工作热情。

Condor公司的发展小趣事

A/D Electronics Inc深知人才是企业发展的核心力量。因此,公司高度重视研发团队的建设和人才培养。通过引进国内外优秀人才和加大研发投入,公司不断提升研发团队的实力和创新能力。同时,公司还建立了完善的培训体系,为员工提供持续的学习和成长机会,激发了员工的创造力和工作热情。

锋鸣电子(Fengming)公司的发展小趣事

福斯特(FIRST)公司在光伏封装材料领域取得了显著成就。自2003年公司前身杭州福斯特热熔胶膜有限公司成立以来,团队成功研发出EVA太阳能电池胶膜,正式进军光伏行业。此后,公司不断投入研发,扩大产能,光伏胶膜(EVA/POE胶膜)的设计产能已达10.51亿平米。至2020年,公司光伏胶膜销量达8.65亿平米,占据全球市场份额约55%-60%,大幅领先其他竞争对手。这一成就不仅巩固了福斯特在光伏胶膜市场的领导地位,还推动了整个行业的发展。

问答坊 | AI 解惑

面试后遭遇小偷

昨天6点下班以后,从深圳罗湖赶到南山蛇口,去参加一个面试,花了一个半小时才到,还好,主考官在那里等找我们,3个人同去了,一进去,主考官在互通姓名之后开考,说实话,题目不难,可就是不会,其中一个人做了2分钟试题,没和面试官交谈就走了,另一个人做了十 ...…

查看全部问答>

Protel 99se原理图、PCB转为PDF的办法

PDF优点太多了,Protel的图纸转换为PDF后是矢量图,因此放大到很大都不会有锯齿和马赛克。用PDF输出电路图和PCB是最佳的选择。 转换需要用到的主要工具: 1.Protel 99se(dxp当然也可以但是现在国内业界用99的还是特别多啊,给制版商DXP的文件他们 ...…

查看全部问答>

谁做过电源载波的!帮帮忙!

谁做过2wire总线的!就是类似消防探头用的,用2根线,不区分方向的,既可以供电,有可以双向传输少量数据的! 有电路图和程序最好!先谢谢了! 邮箱FOX_GALE@SOHU.COM…

查看全部问答>

uc/gui显示的RTC时间重叠,ARM下次显示结果和覆盖上次显示结果。

一切其它都正常。ADS编译能通过,AXD也能仿真。程序是按一个测试过的正常程序裁剪的。 问题是:例如,在(x,y)点显示second=20,等second加1计数时下一个数21和上一次显示结果20周时出显示在(x,y)点。等second满60进位时minute前后两个数一样同时 ...…

查看全部问答>

如何让电动十字滑架移动?

请教各位: 计算机输出信号(偏差量)怎么可以带动电动十字滑架移动?之间需要怎么一个具体的原理,我不懂.需要什么设备,器件请教. 非常感谢! …

查看全部问答>

公司居然可以上论坛发帖子。。。

:D :D :D :D :D 公司屏蔽了那么多网站,哈哈,唯独电子工程世界的论坛么有啊,还可以发帖,赞!!!!…

查看全部问答>

求stm32无线NRF带双通道ADC程序

急求于基于STM32F103C8BT的无线传输带双通道ADC的源程序,手上有无线NRF转USB通讯的程序,也有ADC的程序,但是缺少将他们融合在一起的程序……那位高手能指点一下  …

查看全部问答>