STM32F4时钟系统初探(一)

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

在开始之前先解释几个名词:
HSI: High Speed Internal clock, 高速内部时钟, STM32F429xx默认为16MHz.
HSE: High Speed External clock, 高速外部时钟, 最大可接受50MHz时钟(可外接最大的晶振为26MHz).
LSI: Low Speed Internal clock, 低速内部时钟, 32KHz.
LSE: Low Speed External clock, 低速外部时钟, 一般为32.768KHz.
PLL: Phase-Locked loops, 锁相环, 用于倍频时钟.
VCO: Voltage-Controlled Oscillator, 压控振荡器, PLL的组成部分.

AHB: Advanced High Performance Bus, 高性能总线, 用于高性能模块之间的连接, 如CPU, DMA. 
APB: Advanced Peripheral Bus, 外设总线, 用于连接低速设备, 如UART, Timer.
STM32有两条APB总线, APB1和APB2, APB2的工作频率大于APB1.
APB2最高工作频率为84MHz, APB1最高工作频率为42MHz, AHB最高工作频率同系统时钟, 168MHz.

SYSCLK: 系统时钟.可被HSI, HSE, Main PLL直接驱动, 最大168MHz.
HCLK: CPU, AHB, DMA, 存储器的时钟, 经AHB预分频器得到.
PCLK1: APB1时钟.
PCLK2: APB2时钟.

下图是STM32时钟树的一部分, 这里注要研究一下STM32F4系统时钟和PLL配置相关的东西.

Clcok

从图中可以看出, HSI和HSE可以直接向SYSCLK提供时钟(红线), 它们经过一个预分频器 /M(绿色方框) 后向PLL提供时钟, 同时这个时钟(蓝线)也提供给PLLI2S和PLLSAI(图中未标出).
从VCO倍频出来后的时钟一路经过预分频器 /P 就是PLLCLK(紫色), 可以提供给系统时钟SYSCLK.
一路经过预分频器 /Q 后就是PLL48CK(黄色线), 这个时钟提供给USB OTG FS, SDIO, 一般这个时钟需要固定48MHz.
水绿色方框里的 xN 是VCO倍频的倍数, VCO输出的频率为HSE/HSI的频率经过 /M 分频后的数值乘以N.
接下来看一下ST固件库中提供的PLL配置函数:

1
2
3
4
5
void RCC_PLLConfig(uint32_t RCC_PLLSource, 
                   uint32_t PLLM, 
                   uint32_t PLLN, 
                   uint32_t PLLP, 
                   uint32_t PLLQ);

RCC_PLLSource为PLL的时钟源选择, 可选择为RCC_PLLSource_HSE或者RCC_PLLSource_HSI.
这里的PLLM, PLLN, PLLP, PLLQ便指的是上述的几个分频器的分频因子.
并且这些分频因子取值是有限制如下:
2 <= PLLQ <= 15
2 <= PLLM <= 63
192 <= PLLN <= 432
PLLP 只能是2, 4, 6, 8其中之一.
其中PLLN就是PLL的倍频倍数N.
并且, PLL之后得到的频率不得超过器件的限制频率.
举个实际的例子, 外部晶振为8MHz, 我们想让CPU运行于168MHz, 该怎么配置?
因为PLLM最小只能是2, 所以选择PLLM为2. 
这里8MHz的HSE被PLLM二分频后只有4MHz了.
PLLP最小也只能是2, 我们所需要的SYSCK为168MHz, 所以从VCO出来的频率为168 * 2 = 336MHz.
则倍频倍数N为336 / 4 = 84, 所以PLLN为84.
PLLQ是USB OGT FS的时钟, 固定为48MHz, 所以预分频因子为336 / 48 = 7.
则PLL配置函数应该为:

1
RCC_PLLConfig(RCC_PLLSource_HSE, 2, 84, 2, 7);

当然只使用这一句就不可能让PLL工作的, 还需要配合其它配置才行.

(全文完)


关键字:STM32F4  时钟系统 引用地址:STM32F4时钟系统初探(一)

上一篇:浅谈STM32的端口输出方式
下一篇:stm32笔记:Systick系统滴答定时器

推荐阅读最新更新时间:2024-03-16 15:33

一种用于SDH光纤传输系统设备时钟的数字式锁相环
    摘要: 介绍一种用于SDH光纤传输系统设备时钟的数字式锁相环的构成及设计原理,并给出了有关的测试结果,测试结果表明该锁相环具有很好的跟踪特性。     关键词: 同步传输体制(SDH)  SDH设备时钟(SEC)  数字式锁相环(DPLL)     SDH设备时钟(SEC)是SDH光纤传输系统的重要组成部分,它为SDH设备提供全网统一的定时信息,以便使整个数字网各个节点的全部数据得以正确的传输和交换。     SEC的核心是锁相环,它用来跟踪网同步定时基准,并对定时基准在传输过程中产生的抖动和漂移等损伤进行过滤,而且当所有外部定时基准信号都不可用时,可以通过它内部高稳定度的压控振
[应用]
STM32F429 >> 18. 电源管理_实现低功耗(Code)
睡眠 进入睡眠的方式很简单: 只需要调用WFI 或WFE 命令,在睡眠模式中,内核停止,但是所有外设,包括M4 核心的外设均处于工作状态中。 唤醒睡眠的方式: 任一中断; 唤醒事件。 // Wait For Interrupt __WFI(); // Wait For Event __WFE(); 停止 进入停止的操作为: 调用 PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) 函数。 唤醒停止的操作为: 任一外部中断。 PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEn
[单片机]
STM32F4 USART配置
对于串口就不多罗嗦了, 虽然串口是一种比较古老的接口, 速度较慢, 在计算机上早已淘汰, 但是由于它结构简单, 使用方便, 或许也由于在计算机上使用过有基础支撑(单片机就是在走曾经电脑走过的路), 在嵌入式系统中依然使用相当广泛. 在STM32F429中, 一共有8个串口, 4个USART, 4个UART. 今天要实现的目标, 就是让STM32向串口发送数据到电脑, 让它正真的输出”Hello World!”! 还是使用以前的工程, 不过工程结构略有更改, 如下图: 不同于以前, 我现在选择把整个固件库复制到STM32F4xx_StdPeriph文件夹中, 在用到某个外设时将外设对应的C文件添加进来即可. 本次通讯使
[单片机]
<font color='red'>STM32F4</font> USART配置
【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式
平台: Code Composer Studio 6.2.0 + Grace 2.2.0 MSP430G2553 LaunchPad™ Development Kit (MSP-EXP430G2ET)   以下大部分内容摘自《LaunchPad口袋实验平台 —— MSP-EXP430G2篇》傅强、杨艳 编著(TI大学计划嵌入式微控制器技术丛书) 系统时钟概述   现代单片机的制造工艺都差不多,靠电子元件本身节能的潜力非常有限。单片机的低功耗主要是依靠间歇工作实现的,而间歇工作的方法就是启停系统时钟。如果像普通 51 单片机那样只有一个时钟,关掉时钟意味着单片机全面停工,节能的同时也没法正常使用了。所以出于低功耗的需要,MS
[单片机]
【MSP430G2553】图形化开发笔记(2) <font color='red'>系统</font><font color='red'>时钟</font>和低功耗模式
我将GuiLite移植到了STM32F4开发板上
摘要:最近在做Github找到一个有趣的开源Gui框架:GuiLite,按照说明移植了GuiLite到STM32F4OLED屏幕上,分析一下自己的移植经验。 一、GuiLite介绍 GuiLite是一个开源的Gui框架,只依赖于一个单一的头文件库(GuiLite.h),不需要很复杂的文件管理,代码量平易近人,GuiLite由4千行C++代码编写,单片机上也能流畅运行,其最低的硬件运行要求如下: CPU主频 ROM大小 RAM大小 24 MHZ 29KB 9KB 同时GuiLite具有很强的跨平台特性: 支持的操作系统:iOS/macOS/WatchOS,Android,Linux(ARM/x86-64),Windo
[单片机]
我将GuiLite移植到了<font color='red'>STM32F4</font>开发板上
STM32-(16):Systick 系统时钟
Systick的两大作用: 1、可以产生精确延时(原先的Delay只是盲等) 2、可以提供给操作系统一个单独的心跳(时钟)节拍 通常实现Delay(N)函数的方法为: for(i = 0; i = x; i ++); x…对应于对应于N毫秒的循环值 对于STM32系列微处理器来说,执行一条指令只有几十个 ns,进行for循环时,要实现N毫秒的x值非常大,而且由于系 统频率的宽广,很难计算出延时N毫秒的精确值。针对STM32 微处理器,需要重新设计一个新的方法去实现该功能,以实现在 程序中使用Delay(N)。 Cortex-M3的内核中包含一个SysTick时钟。SysTick为一个24 位递减计数器,SysTick设定初值并使能
[单片机]
STM32-(16):Systick <font color='red'>系统</font><font color='red'>时钟</font>
STM32F1系列HAL库配置系统时钟
其实一开始对于时钟我也是知之甚少,在MSP432中我就一直忽视时钟配置,其实也是在STM32学习时落下的病根,现在趁有空补一下。 时钟简单讲解 对于时钟系统,在之前我写启动文件涉及到,其实,每个功能的实现都涉及到时钟。我们首先说明一下RCC RCC:复位和时钟控制 什么是复位,什么又是时钟?在STM32参考手册中文版我们可以看到 注意“除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(见图4)以外,系统复位将复位所有寄存器至它们的复位状态。”这句话告诉我们复位时,让寄存器(除了上述提及的CSR以及备份区域寄存器外)恢复至初始状态,也就是我们上电后寄存器的默认状态。 我们使用时也是在不断复位中使用的
[单片机]
STM32F1系列HAL库配置<font color='red'>系统</font><font color='red'>时钟</font>
ARM嵌入式系统软件实时时钟的设计
1 引言     现在的许多设备对实时时钟都有很高的要求,在片集成的实时时钟往往只注意到了其使用的方便,而没有考虑在实际应用中还有很多特殊的要求。本文讨论如何使用独立的外扩实时时钟,来满足这些要求。 什么是实时系统?就是系统运行时的反馈信息或者指令,必须在要求的时间内发出或者返回,否则视为无效。例如,数据采集的时候,必须在对应的时间内得到信号,以保证数据采集的有效性。那么什么是实时时钟?就是采用独立的晶振(或集成),拥有独立供电系统,永不间断的运行,从而给系统提供可靠的系统时间。     集成的实时时钟和独立实时时钟的比较:     以博创UP-NETARM3000开发板为例,它使用的是三星公司生产的S3C44B0XARM7处理器
[单片机]
ARM嵌入式<font color='red'>系统</font>软件实时<font color='red'>时钟</font>的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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