STM32F4时钟系统

发布者:BlossomJoy最新更新时间:2022-02-28 来源: eefocus关键字:STM32F4  时钟系统  内部时钟 手机看文章 扫描二维码
随时随地手机看文章

1:STM32有5个时钟源:HSI,HSE,LSI,LSE,PLL 

HSI是高速内部时钟,RC振荡器、频率为16MHZ,精度不高。可以直接作为系统时钟或者用作PLL时钟输入

HSE是高速外部时钟,可接石英/陶瓷谐振器,或接外部时钟源,频率范围为4M~26M.

LSI是低速内部时钟,RC振荡器,频率为32KHZ,提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。

LSE是低速外部时钟,接频率为32.768KHZ的石英石钟。RTC

PLL为锁相环倍频输出。STM32F4有两个PLL。

      主PLL,(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟


         第一个输出PLLP用于生成高速的系统时钟(最高168MHZ)


         第二个输出PLLQ用于生成USB OTG FS的时钟(48MHZ),随机数发生器的时钟和SDIO时钟


     专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。

2:系统时钟SYSCLK可来源于三个时钟源:

HSI振荡器时钟


HSE振荡器时钟


PLL时钟

3:STM32F4时钟信号输出MC01(PA8)和MCO2(PC9)

    MCO1:可以配置预分频器(1~5)向MCO1引脚PA8输出4个不同的时钟源


HIS

LSE

HSE

PLL

MCO2:可以配置预分频器(1~5)向MCO2引脚PC9输出4个不同的时钟源: 


 HSE

PLL

SYSCLK

PLLI2S

注:MCO最大输出时钟不超过100MHZ,且在使用任何一个外设之前,必须首先使能其相应的时钟


4:系统时钟初始化函数 SystemInit();

在使用标准库函数的时候,在系统启动之后会自动调用:


; Reset handler

Reset_Handler    PROC

                 EXPORT  Reset_Handler             [WEAK]

        IMPORT  SystemInit

        IMPORT  __main

 

                 LDR     R0, =SystemInit

                 BLX     R0

                 LDR     R0, =__main

                 BX      R0

                 ENDP

若要使用外部时钟源HSE,要配置外部晶振频率在

#if !defined  (HSE_VALUE) 

  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

初始化之前首先通过宏定义定义下面变量来定义系统时钟频率:

/************************* PLL Parameters *************************************/

#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)

/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */

#define PLL_M      8

#else /* STM32F411xE */

#if defined (USE_HSE_BYPASS)

#define PLL_M      8    

#else /* STM32F411xE */   

#define PLL_M      16

#endif /* USE_HSE_BYPASS */

#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */  

 

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */

#define PLL_Q      7

 

#if defined (STM32F40_41xxx)

#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */

#define PLL_P      2

#endif /* STM32F40_41xxx */

在MDK钟已经宏定义了STM32F40_41xxx


SO,整理一下,得到如下定义:


#define PLL_M 8

#define PLL_Q 7

#define PLL_N 336

#define PLL_P 2

/*  PLL=8*N/(M*P)=8*336/(8*2)=168M  */

执行上面的操作后:    


SYSCLK(系统时钟) =168MHz     

AHB总线时钟(HCLK=SYSCLK)   =168MHz   

 APB1总线时钟(PCLK1=SYSCLK/4)    =42MHz   

APB2总线时钟(PCLK2=SYSCLK/2)   =84MHz     

PLL主时钟     =168MHz

可以通过变量SystemCoreClock获取系统变量。


#if defined (STM32F40_41xxx)

  uint32_t SystemCoreClock = 168000000;

#endif /* STM32F40_41xxx */

关键字:STM32F4  时钟系统  内部时钟 引用地址:STM32F4时钟系统

上一篇:STM32F4GPIO
下一篇:STM32--DMA

推荐阅读最新更新时间:2024-11-13 21:41

STM32F407玩控制—自适应模糊PID控制
自适应模糊PID控制的原理如图1所示,从图中可以看出对偏差和偏差变化率进行模糊推理,获得Δkp、Δki、Δkd,模糊控制器的PID参数实际值为:kp=kp0+qp*Δkp、ki=ki0+qi*Δki、kd=kd0+qd*Δkd,其中qp、qi、qd为比例因子,这是比较常见的一种计算方式,但在薛定宇的《控制数学问题的MATLAB求解》一书中讲了另外一种计算方式:kp(k)=kp(k-1)+γ(k)*Δkp、ki(k)=ki(k-1))+γ(k)*Δki、kd(k)=kd(k-1)+γ(k)*Δkd,显然这种计算方式更复杂,我们这里采用前者,为了进行模糊推理,需要确定模糊规则表和各个模糊变量的隶属度函数,常见的模糊规则表如图2所示,我
[单片机]
用<font color='red'>STM32F4</font>07玩控制—自适应模糊PID控制
STM32F407时钟设置
这里我们写一个RCC配置函数来说明各函数的用途,其中HSE = 8MHz。 /** * @说明 配置STM32F407的时钟系统 * @参数 无 * @返回 无 * @说明 void Clock_Config(void) 按如下表格配置时钟 * *================================================================== * Supported STM32F4xx device revision | Rev A *------------------------------------------------------------------
[单片机]
stm32f407】SD协议(一)-SDIO
SDIO简介 1.SDIO主要功能及框图 STM32F4的SDIO控制器支持多媒体卡(MMC卡)、SD存储卡、SD I/O卡和CE-ATA设备等。SDIO的主要功能如下: 1)与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。 2)与较早的多媒体卡系统规格版本全兼容(向前兼容)。 3)与SD存储卡规格版本2.0全兼容。 4)与SD I/O卡规格版本2.0全兼容:支持良种不同的数据总线模式:1位(默认)和4位。 5)完全支持CE-ATA功能(与CE-ATA数字协议版本1.1全兼容)。 8位总线模式下数据传输速率可达48MHz(分频器旁路时)。 6)数据和命令输出使
[单片机]
【<font color='red'>stm32f4</font>07】SD协议(一)-SDIO
stm32f407之ADC与DMA
昨天调试了stm32f407的ADC功能,因为那个恼人的printf函数问题这篇ADC文章一直没有发表出来,今天5.1归来抽空补上。功能为实现ADC的单通道电压采集,并实现DMA数据管理,同时加了ADC看门狗功能,并用printf函数通过串口返回采集值与换算后的实际电压值。代码如下: /************************************************************ Copyright (C), 2012-2022, yin. FileName: main.c Author: 小枣年糕 Date: 2012\05\01 Description: ADC3 DMA print
[单片机]
STM32F407驱动MT9T001 CMOS图像传感器模块
一、MT9T001图像传感器介绍 MT9T001是MICRON公司生产的一款CMOS图像传感器,分辨率可以达到QXGA,有效像素阵列为2048H*1536V。可实现片上开窗,行列跳跃像素,以及快照功能,内部寄存器编程采用I2C总线。 MT9T001可以工作在其默认模式或者通过编程可以选择帧的大小,曝光时间,色彩增益,以及其他相关参数。默认的工作模式是以12fps的帧率输出一个QXGA的图像,片载的AD转换器可以提供每个像素10bit的分辨率。可提供行场同步信号,以及用于同步有效数据的像素时钟。 MT9T001的像素阵列为2112行*1568列,但是并不是所有的像素是有效像素。如图3所示,从第0列到27列以及从2085列到
[单片机]
<font color='red'>STM32F4</font>07驱动MT9T001 CMOS图像传感器模块
msp430设置基本时钟系统
时钟信号概述 通过这些基本的时钟模块,我们可以得到3个有用的时钟信号: ACLK辅助时钟(Auxillary Clock) ACLK是LFXT1CLK时钟源经1、2、4、8分频后得到的。 ACLK可由软件选择作为各个外围模块的时钟信号,一般用于低速外设。 MCLK主系统时钟(Main System Clock) MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经1、2、4、8分频。 MCLK通常用于CPU运行,程序的执行和其他使用到高速时钟的模块。 SMCLK子系统时钟(Sub System Clock) SMCLK可由软件选择来自XT2CLK或DCOCLK,然后经1、2 、4
[单片机]
STM32f407学习------(2)定时中断+万年历
任务:利用定时器中断实验、TFT LCD显示实验、OLED显示实验和按键实验 实现在32板子的显示屏上显示万历表,能显示年月日时分秒及星期,同时要处理好闰年与平年。不同的按键按下,能使对应的时间数字精确地发生相应的变化。 参考资料:https://wenku.baidu.com/view/2a698426a21614791711288e.html 还没更新完 非常不好意思 下次补上 1:我所理解的定时器中断: 当计数器计数到所设定的值时,会产生一个中断。 2:定时器中断初始化函数 void TIM3_Int_Init( ) 3:定时器中断实现步骤: (1):使能定时器时钟(一般用到外设,都需要使能相应的时钟) (2
[单片机]
STM32F427 内部晶振初始化
void SystemHSIInit(void) { /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB- CPACR |= ((3UL 10*2)|(3UL 11*2)); /* set CP10 and CP11 Full Access */ #endif /* Reset the RCC clock configuration to the default reset state
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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