ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-05 14:35:09  阅读:203  来源: 互联网

标签:配置 函数 HSE 简略 STM32 -------------------------------------------------------------


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

* 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 中完成的
  Reset_Handler
转跳入 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函数后,我们阅读其函数,发现了内部的配置时钟源的函数。
配置时钟源的函数
转跳进入 SetSysClock 函数。再阅读其内容。发现其配置使用时钟源的语句
配置PLL使用时钟源的语句

    RCC->CFGR |= RCC_CFGR_SW_PLL;

为选择时钟源的语句,其中其他语句
在这里插入图片描述

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

标签:配置,函数,HSE,简略,STM32,-------------------------------------------------------------
来源: https://blog.csdn.net/Novenb/article/details/121727817

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有