基于STM32F407时钟配置学习

发布者:theta18最新更新时间:2019-08-07 来源: eefocus关键字:STM32F407  时钟配置  分频 手机看文章 扫描二维码
随时随地手机看文章

2F4x系列时钟树如下:

这里写图片描述

1、系统时钟SYSCLK

在STM32F407中,除了一些特定的时钟(例如,USB OTG FS时钟,I2S时钟)外,系统所有外设的时钟均是通过SYSCLK来提供的。也就是说我们经常用到的外设时钟,都是通过SYSCLK分频得到的。下面是和SYSCLK相关的时钟树的图。 

 这里写图片描述 

由图中可以看到,SYSCLK的来源主要有三个。 

- HSI 振荡器时钟 

- HSE 振荡器时钟 

- 主 PLL (PLL) 时钟 

下面分别来看下系统时钟SYSCLK的三个来源。


(1) 高速外部时钟HSE(4M~26M)

高速外部时钟是芯片内部的HSE振荡器产生的。高速外部信号(HSE)有两个时钟源。 

- HSE外部晶振/陶瓷振荡器 

- HSE外部用户时钟 

下图是HSE/LSE的时钟源硬件配置 


这里写图片描述

外部晶振/陶瓷振荡器( HSE晶振)


这种方式是通过在OSC_IN和OSC_OUT接入外部晶振实现的。在这种模式下,因为晶振起振需要一定的时间,因此可以通过RCC 时钟控制寄存器(RCC_CR) 中的HSERDY 标志指示高速外部振荡器是否稳定。时钟启动后,HSERDY被硬件置1。如果在RCC时钟中断寄存器(RCC_CIR)中使能中断,则可以触发中断。 

HSE晶振可以通过RCC时钟控制寄存器(RCC_CR)的HSEON打开或者关闭。


HSE外部时钟源(HSE旁路)


这种方式是指通过OSC_IN引脚输入一个外部时钟源,这个时钟源是外部产生的现成的时钟信号。在这种模式下,必须使用占空比大约为50%的外部时钟信号来驱动OSC_IN引脚。 

此模式通过RCC时钟控制寄存器(RCC_CR)的HSEBYP和HSEON位一起置1进行选择。


注意:


RCC->CR |= ((uint32_t)RCC_CR_HSEON|RCC_CR_HSEBYP)此时选择的是HSE旁路,如果HSE是HSE晶振,则晶振启动不了,时钟源会默认选择HSI。

RCC->CR |= ((uint32_t)RCC_CR_HSEON)此时选择HSE晶振。

HSE外部晶振频率在stm32f4xx.h里的HSE_VALUE更改。

(2) 高速内部时钟HSI

STM32F407内部自带一个16M的内部晶振,这个晶振产生的时钟信号可以直接用作系统时钟SYSCLK。也可以作为PLL的输入。内部晶振的优点是成本低,启动速度也比外部晶振要快,但是内部晶振的精度比外部晶振要差。可以通过RCC时钟控制寄存器(RCC_CR)中的HSIRDY 标志来判断HSI RC时钟信号是否稳定。


(3) 主PLL时钟

STM32F407具有两个PLL,用于产生不同的时钟信号。这里主要来讨论主PLL时钟。主PLL时钟的时钟源有两个信号,分别是上边提到的HSI信号和HSE信号。PLL通过把这两个信号倍频,分频等达到更高频率的时钟信号。一般来说,由于HSI和HSE的时钟频率较低,SYSCLK一般都不会选择HSI时钟和HSE时钟作为系统时钟,而主PLL产生的时钟一般会用作系统时钟。(但是,我刚接手的项目工程确实用了HSI作为系统时钟,搞了一天,最后还是借用RCC_GetClocksFreq(&get_rcc_clock) 这个函数查看实时时钟才发现问题,怪我太蠢。)下面是主PLL的内部结构框图。 

 这里写图片描述 

由图可以看出PLL的时钟源主要有两个:HSE时钟信号和HIS时钟信号。其中PLL_M,PLL_N,PLL_P,PLL_Q是一个分频器,而PLL_M是一个倍频器。假设图中经过PLL_N之后的时钟信号为PLL_VCO,PLL使用外部时钟信号HSE作为时钟源。那么有如下关系。 

锁相环压腔振荡器时钟PLL_VCO = (HSE / PLL_M)* PLL_N 

系统时钟SYSCLK = PLL_VCO/ PLL_P 

所以,如果外部晶振的频率已经确定了,那么确定PLL_M,PLL_N,PLL_P的系数就可以得到对应频率的系统时钟SYSCLK,其中PLL_M,PLL_N,PLL_P可以有多种组合,只要满足相应的条件即可。例如,假设外部晶振为8M,对STM32F407来说,系统时钟的最大频率为168M,那么久可以分别设置PLL_M = 8,PLL_N = 336,PLL_P = 2。来产生168M的时钟。即SYSCLK = ( 8 /8 ) * 336 / 2 = 168M。 

通过配置主PLL,我们就得到了系统的主时钟SYSCLK,下一步我们就可以通过这个时钟来分频得到各个外设的时钟。


2、AHBx时钟

经过AHBx预分频器,可以得到AHBx外设时钟。一般来说AHBx分频器的值为1,也就是说AHBx的时钟和系统时钟相等。AHBx上边所挂的外设可以到RCC和AHBx外设相关的寄存器去看,在使能AHBx上的某个外设之前,必须使能该外设时钟。 


这里写图片描述

3、APB1和APB2时钟

经过APB1预分频器和APB2预分频器可以得到APB1和APB2外设时钟。在STM32F407里边,APB1的最大时钟为42M,APB2的最大时钟为84M。同样可以在RCC的寄存器下边观测APB1和APB2上边所挂的外设。使用某个外设之前也要使能相应的时钟。 

 这里写图片描述 

由上图可知,APB1和APB2是由AHBx分频得到。分频在system_stm32f4xx.c里的SetSysClock()里实现。

--------------------- 

关键字:STM32F407  时钟配置  分频 引用地址:基于STM32F407时钟配置学习

上一篇:回炉重造STM32 CUBEMX之串口通讯问题四
下一篇:STM32F407时钟设置

推荐阅读最新更新时间:2024-11-11 10:34

stm32f407之定时器中断使用流程
1.初始化 1.定义相关变量 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; 2.打开定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 3.定时器寄存器配置 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure
[单片机]
<font color='red'>stm32f407</font>之定时器中断使用流程
stm32f407以太网及USB OTG快速开发
引言 想要快速完成网络协议栈和USB OTG功能,使用ST自家的工具STM32CubMx再好不过的了。如果你还不会使用,别着急下面我会一步一步的用图片告诉你如何做。 软件平台:windows、STM32CubMx、keil v5 硬件平台:原子的stm32f407ZGT6开发板, STM32CubMx配置 1、以太网管脚的映射配置 第一:阅读原理图,使用STM32CubMx完成配置,原理图这里不说明。直接到STM32CubMx配置。 (1)、打开STM32CubMx软件,选择New Project,在弹出的菜单选择,选择对应的芯片,点击OK即可。如下图: (2) 设置clock,板子使用的是8MHz的晶振,软件对应
[单片机]
<font color='red'>stm32f407</font>以太网及USB OTG快速开发
家用音箱分频器和车载分频器的对比
在汽车电子领域,被动式分频网络有着广泛的用途,特别是在同轴扬声器和分体式扬声器领域。被动式分频网络将功放输出的信号分割成不同的频率范围。分别给相对于的喇叭。最简单的分频电路高音串联一颗电容,在汽车同轴喇叭中,全频音乐信号通过电容输出高频给高音喇叭,滤去了低频。 在最简单的分频网络设计中,两路喇叭只要用一个电容就可以将高频给高音单元,只要用一个电感就可以将中低频给低音单元。三路的喇叭的应用也很简单,只要串接一个电容就可以将高频给高音单元,串接一个电容和一个电感将中频给中音单元,串接一个电感就可以将低频给低音单元,如下图,就是我们常说的一阶分频器 车载分频器介绍 分频器在音响中起着十分重要的作用,它的作用是把全频带的音频分割成
[嵌入式]
家用音箱<font color='red'>分频</font>器和车载<font color='red'>分频</font>器的对比
STM32F1RCC时钟配置总结
三种不同的时钟源可被用来驱动系统时钟(SYSCLK): ● HSI振荡器时钟 ● HSE振荡器时钟 ● PLL时钟 这些设备有以下2种二级时钟源: ● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。 RTC用于从停机/ 待机模式下自动唤醒系统。 ● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。 当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。 stm32单片机的将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。 设置时钟流程: 1、将RCC寄存器重新设置
[单片机]
stm32f407之PWM(操作寄存器)
脉宽调制模式可以生成一个由TIMx_ARR寄存器的值确定频率和TIMx_CCRx寄存器的值确定占空比的信号。 脉宽调制模式可以生成一个由TIMx_ARR寄存器的值确定频率和TIMx_CCRx寄存器的值确定占空比的信号。 可以对每个通道独立选择PWM模式,( OCx输出一个PWM信号)在TIMx_CCMRx寄存器的OCxM位写110(PWM模式1)或111(PWM模式2)。必须通过设置TIMx_CCMRx寄存器的OCxPE位,启用相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。 仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,
[单片机]
stm32 时钟配置——外部时钟倍频、内部时钟倍频
stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差。 准确的来说有4个时钟源可以选分别是HSI、LSI、HSE、LSE(即内部高速,内部低速,外部高速,外部低速),高速时钟主要用于系统内核和总线上的外设时钟。低速时钟主要用于独立看门狗IWDG、实时时钟RTC。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,上电后默认的系统时时钟 SYSCLK = 8MHz,Flash编程时钟。 ①、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③、LSI是低速内部时钟,RC振荡器,频率
[单片机]
stm32 <font color='red'>时钟</font><font color='red'>配置</font>——外部<font color='red'>时钟</font>倍频、内部<font color='red'>时钟</font>倍频
将50Hz或60Hz频率变成60分之1Hz频率的分频
将50Hz或60Hz频率变成60分之1Hz频率的分频器
[模拟电子]
将50Hz或60Hz频率变成60分之1Hz频率的<font color='red'>分频</font>器
stm32f407 中断问题
1 中断分组 嵌套中断的含义: 高优先级中断能打断低优先级中断 翻译: STM32分组为:组0-4(没组都有16个优先级) 分组配置在寄存器SCB- AIRCR中 使用示例: NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 #define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*! 2 bits for pre-emption priority #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) v
[单片机]
<font color='red'>stm32f407</font> 中断问题
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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