欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32时钟配置

程序员文章站 2022-06-09 09:27:32
...

本文以外部高速时钟源HSE为例,介绍STM32F4时钟配置实现。

一、概述

STM32F4时钟树如下图所示:

STM32时钟配置

上图(上图中的180Mhz改为168Mhz)中红色箭头线时钟传播路径,紫色框标注的是重要的时钟配置对象,包括:AHB bus、Core、memory 、DMA、APB peripheral 和 APB timer。下面介绍实现方法。

注:AHB最大允许时钟频率为168MHz,APB2最大为84MHz,APB1最大为42MHz。

二、配置步骤

  1. 在RCC中设置选择外部外部高速时钟源。HSE=8MHz;
  2. 配置PLL时钟。由图中可以看出:PLLCLK=HSE/M*N/P。设置M=8,倍频系数N=336,分频器系数P=2,PLLCLK=168MHz;
  3. 配置SYSCLK。选择SYSCLK=PLLCLK=168MHz;
  4. 配置HCLK。由上图可以看到,HCLK=SYSCLK/AHB PRESC。设置HCLK=PLLCLK=168MHz;此时AHB bus、Core、memory 、DMA的时钟为168MHz
  5. 配置SysTick时钟。RCC 向 Cortex 系统定时器 (SysTick) 馈送 8 分频的 AHB 时钟 (HCLK)。 SysTick 可使用
    此时钟作为时钟源,也可使用 HCLK 作为时钟源,具体可在 SysTick 控制和状态寄存器中配置。
  6. 配置APB预分频器。APB预分频器不仅决定了APB外设的频率,还影响定时器的频率。
  7. STM32F405xx/07xx 和 STM32F415xx/17xx 的定时器时钟频率由硬件自动设置。分为两种情况:
    1. 如果 APB 预分频器为 1,定时器时钟频率等于 APB 域的频率。
    2. 否则,等于 APB 域的频率的两倍 (×2)。

三、代码清单

STM32F4时钟系统初始化是在system_stm32f4xx.c中完成的。首先

1、全部配置如下:

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)                      | 8000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 8
  *-----------------------------------------------------------------------------
  *        PLL_N                                  | 336
  *-----------------------------------------------------------------------------
  *        PLL_P                                  | 2
  *-----------------------------------------------------------------------------
  *        PLL_Q                                  | 7
  *-----------------------------------------------------------------------------
  *        PLLI2S_N                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_R                               | NA
  *-----------------------------------------------------------------------------
  *        I2S input clock                        | NA
  *-----------------------------------------------------------------------------
  *        VDD(V)                                 | 3.3
  *-----------------------------------------------------------------------------
  *        Main regulator output voltage          | Scale1 mode
  *-----------------------------------------------------------------------------
  *        Flash Latency(WS)                      | 5
  *-----------------------------------------------------------------------------
  *        Prefetch Buffer                        | ON
  *-----------------------------------------------------------------------------
  *        Instruction cache                      | ON
  *-----------------------------------------------------------------------------
  *        Data cache                             | ON
  *-----------------------------------------------------------------------------
  *        Require 48MHz for USB OTG FS,          | Disabled
  *        SDIO and RNG clock                     |
  *-----------------------------------------------------------------------------
  *=============================================================================

 2、PLL配置

#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
 /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
 #define PLL_M      8
#elif defined(STM32F412xG) || defined(STM32F413_423xx) || defined (STM32F446xx)
 #define PLL_M      8
#elif defined (STM32F410xx) || defined (STM32F411xE)
 #if defined(USE_HSE_BYPASS)
  #define PLL_M      8    
 #else /* !USE_HSE_BYPASS */
  #define PLL_M      16
 #endif /* USE_HSE_BYPASS */
#else
#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F469_479xx */  

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7