历史上的今天
返回首页

历史上的今天

今天是:2025年08月07日(星期四)

正在发生

2019年08月07日 | 基于STM32F407时钟配置学习

2019-08-07 来源:eefocus

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()里实现。

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

推荐阅读

史海拾趣

问答坊 | AI 解惑

有人用tftpd32.exe做服务器下载程序到开发板么?

我怎么下载不了 在PC本机上测试,可以下载。 但用开发板下载不了,在PC上用抓包软件能看到开发板发来的请求,但tftpd32.exe没反应…

查看全部问答>

wince6.0 mp3解码问题。

我现在遇到两首mp3,在pc上看到属性为mp3, 立体声,16bit,44.1k 我在系统中加了mp3 cedec,MPEG-1 Layer 1 and 2 Audio Codec,但就是播放不了。 从驱动的private_WaveOpen中发现lpFormat->wFormatTag=80,正常应该是1即WAVE_FORMAT_PCM,只支持PC ...…

查看全部问答>

求wince下的2410 BSP

当初买开发板的时候呆的光盘找不到了 两年过去了 估计技术支持也不会管了 那位兄弟有的话 发给我一个吧 先谢了 wgnstar@163.com…

查看全部问答>

抢楼咯,价值600元的专家讲座票,免费赠送啦

9月7日-9日在成都举办的电子展中有近十场关于电磁兼容和电路保护的专家讲座(邀请了德国的电磁兼容专家做专题讲座和交流),我们公司是参展单位,有几张赠票,现免费送给有需要的工程师朋友们,这里跟帖的8楼、18楼将获得赠票(8月底前,请留联系方 ...…

查看全部问答>

LED柔性灯带 不亮原因解析

柔性灯带在经过重重检测和把关之后,还是会有不亮的现象。究其原因,有如下几种:   1、LED柔性灯带的包装保护不完善,造成运输过程中灯珠受到撞击而损坏。   2、LED柔性灯带的焊接点有虚焊现象,运输过程中的震动造成焊点脱落而导致灯带不亮 ...…

查看全部问答>

基于MSP430大量工程文件资料

MSP430F149+1602数码显示和实时时钟 MSP430F149,IAR,ADC采样之后对太阳点光源进行跟踪 MSP430F149 AD7705程序 MSP430 BH1750测量光强(已测试) Launch Pad NOKIA5110 Clock 使用MSP430单片机控制超声波测距并使用5110显示 基于MSP430的MP3 源 ...…

查看全部问答>

msp430g2553电容触摸按键干扰问题

本帖最后由 hjl240 于 2014-7-4 10:36 编辑 自己做了一个msp430g2553板子,上面有电容触摸按键,还有液晶,型号为oled12864,1.3寸的,调试程序的时候发现:     单独调试触摸按键的时候,触摸按键很正常,一触摸就有反应,不触摸就没有 ...…

查看全部问答>

在AD的领域是ADI最厉害吗?

突然想问问,在AD的领域是ADI最厉害吗? …

查看全部问答>

试试能考到你吗——关于“斩波运算放大器”

试试能考到你吗——关于“斩波运算放大器”,下面那条表述是正确滴 欢迎大家踊跃讨论! 可以看看文章斩波型运放及其噪声 https://bbs.eeworld.com.cn/thread-455265-1-1.html …

查看全部问答>

[LPC54102]也用万利的板子玩双核-Blinky LED

本帖最后由 wgsxsm 于 2015-4-21 22:40 编辑   经常逛论坛,有天无意间浏览到此贴:https://bbs.eeworld.com.cn/thread-459450-1-1.html 双核LPC54102的板子还有剩余,刚好最近新配了电脑,业余时间还是有的,果断申请了。  &nb ...…

查看全部问答>