STM32F4时钟系统初探(二)

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

上次了解了STM32F4时钟系统中PLL的基本状况, 现在我打算自已动手配置一下STM32的时钟, 使用PLL将STM32F429的主频倍到168MHz去, Let’s go.

名词注解:
RCC: Reset Clock Config, 复位时钟配置.

下面直接上代码, 但有有一点要注意: 在使能PLL之前PLL所有的参数都要配置完毕, 等PLL使能后PLL是不可以再进行配置的.

代码:

void RCC_Config(void)

{

    ErrorStatus status = ERROR;

    // 复位RCC寄存器

    RCC_DeInit();

    // 打开外部高速晶振

    RCC_HSEConfig(RCC_HSE_ON);

    // 等待高速晶振稳定

    status = RCC_WaitForHSEStartUp();

 

    if (status == SUCCESS)

    {

        // 使能flash缓存预读取

        FLASH_PrefetchBufferCmd(ENABLE);

        // 在STM32F42xxx和STM32F43xxx中, 这个值与电压和主频都有关系.

        // 当电压在2.7-3.6V, 150 < HCLK <= 180MHz时, 为5个WS

        FLASH_SetLatency(FLASH_Latency_5);

        // 配置PLL, SYSCLK = 168MHz

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

        // 使能PLL

        RCC_PLLCmd(ENABLE);

        // 等待PLL稳定

        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

        // 设置PLL为系统时钟

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        // 等待PLL被用于系统时钟

        while (RCC_GetSYSCLKSource() != 0x08);

    }

    else

    {

        // HSE启动失败, 死循环

        while (1);

    }

 

    return;

}

使用以上代码就可以使用PLL将主频倍到168MHz去了, RCC_PLLConfig(RCC_PLLSource_HSE, 2, 84, 2, 7)这个函数中的参数怎么计算可以参照上一节, 在这里不再多说.
接下来就是相应外设时钟的配置, 建议在相应的外设初始化中配置即可. 不同的外设属于不同的总线, 在使用外设前记得配置对应的时钟.
在RCC初始化中调用了两个FLASH相关的函数, 这里说一下是怎么回事.

ARM的大部分指令可以在一个时钟周期中执行完成, 当CPU主频为168MHz时, 指令周期大约为6us, 但是Flash的读取时间大约为35us, 这样就带来一个矛盾, CPU执行速度太快, 指令来不及从Flash读取. 为了使CPU能全速运行, Flash控制器使用了一个128位的指令预读缓冲器, 可存储4条32位指令或者8条16位指令. FLASH_PrefetchBufferCmd(ENABLE)指令用来使能这个缓存区, 需要注意的是当电压低于2.1V时缓存区必须禁用掉(RM0090 P80). FLASH_SetLatency(FLASH_Latency_5)设置Flash预读缓存所需要的等待状态, 这个值与CPU的主频和电压均有关系, 具体可以参考数据手册, 对于STM32F42xxx和STM32F43xxx, 主频在150M到180M之间时, 需要5个等待状态(Wait states), 为6个CPU周期.


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

上一篇:让LCD闪烁起来:STM32F4SysTick的设置与使用
下一篇:STM32 的加密实现

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

一种用于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