学习STM32的自我记录之时钟体系(简略)

1、修改工作频率
我所使用的是STM32F407VET6的芯片,根据官方的信息,该芯片的CPU的额定频率应该是168MHz。但是由于外设上的HSE(外部高速震荡时钟) 只有8M,与官方设定的25M不同,因此我们需要在库函数中进行修改,使CPU工作频率能工作在168M。
在修改额定频率之前,我们先来看看时钟体系是怎么样的。
学习STM32的自我记录之时钟体系(简略)
根据中文参考手册(P116),我们发现STM32F4xx系列拥有三种不同的时钟源来驱动系统时钟(SYSCLK),分别为HSI(内部高速震荡时钟)、HSE(外部高速震荡时钟)和PLL(锁相环回路)
学习STM32的自我记录之时钟体系(简略)
如图,SYSCLK可由HSE、HSI、或PLL直接配置。PLL由HSE或HSI配置。其中PLL配置的公式如下。
学习STM32的自我记录之时钟体系(简略)
未标黄的公式是用于计算USB等的,暂时不看它。
其中PLL_N(倍频因子)、PLL_M(分频因子)、和PLL_P(分频因子)。
所以,现在可以对芯片工作频率进行修正了。
学习STM32的自我记录之时钟体系(简略)
时钟配置是在启动文件中的。下述是启动文件的描述

* Description        : STM32F40xxx/41xxx devices vector table for MDK-ARM toolchain. 
;*                      This module performs:
;*                      - Set the initial SP
;*                      - Set the initial PC == Reset_Handler
;*                      - Set the vector table entries with the exceptions ISR address
;*                      - Configure the system clock and the external SRAM mounted on 
;*                        STM324xG-EVAL board to be used as data memory (optional, 
;*                        to be enabled by user)
;*                      - Branches to __main in the C library (which eventually
;*                        calls main()).
;*                      After Reset the CortexM4 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>

系统时钟的配置是在 Reset_Handler 中完成的
学习STM32的自我记录之时钟体系(简略)
转跳入 SystemInit 函数,在该.c文件中可看到注释中有

* 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define
  *    in "stm32f4xx.h" file. When HSE is used as system clock source, directly or
  *    through PLL, and you are using different crystal you have to adapt the HSE
  *    value to your own configuration.
  *
  * 5. This file configures the system clock as follows:
  *=============================================================================
  *=============================================================================
  *                    Supported STM32F40xxx/41xxx devices
  *-----------------------------------------------------------------------------
  *        System Clock source                    | PLL (HSE)
  *-----------------------------------------------------------------------------
  *        SYSCLK(Hz)                             | 168000000
  *-----------------------------------------------------------------------------
  *        HCLK(Hz)                               | 168000000
  *-----------------------------------------------------------------------------
  *        AHB Prescaler                          | 1
  *-----------------------------------------------------------------------------
  *        APB1 Prescaler                         | 4
  *-----------------------------------------------------------------------------
  *        APB2 Prescaler                         | 2
  *-----------------------------------------------------------------------------
  *        HSE Frequency(Hz)                      | 25000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 25
  *-----------------------------------------------------------------------------
  *        PLL_N                                  | 336
  *-----------------------------------------------------------------------------
  *        PLL_P                                  | 2
  *-----------------------------------------------------------------------------

转跳HSE_VALUE,修改25M为8M;同时转跳PLL_M,修改25为8。就完成了。

2、切换时钟源
在转跳入 SystemInit函数后,我们阅读其函数,发现了内部的配置时钟源的函数。
学习STM32的自我记录之时钟体系(简略)
转跳进入 SetSysClock 函数。再阅读其内容。发现其配置使用时钟源的语句
学习STM32的自我记录之时钟体系(简略)

    RCC->CFGR |= RCC_CFGR_SW_PLL;

为选择时钟源的语句,其中其他语句
学习STM32的自我记录之时钟体系(简略)

3、小结
时钟的配置是在启动文件中就进行的,其参数的描述在 SystemInit 函数的.c文件头部注释中。

上一篇:PCB---STM32最小系统制作过程


下一篇:STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训