当前位置:首页 > 单片机 > 单片机
[导读]上次了解了STM32F4时钟系统中PLL的基本状况, 现在我打算自已动手配置一下STM32的时钟, 使用PLL将STM32F429的主频倍到168MHz去, Let’s go.名词注解:RCC: Reset Clock Config, 复位时钟配置.下面直接上代码, 但有有一

上次了解了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周期.


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

好,有了CPU、存储器、总线以及外设,我们把它们有机地组合封装在一起,再把各个外设、总线的信号,以及供电和地通过引脚引出来,这就是一片完整的单片机芯片。等等,要让单片机跑起来似乎还少了些什么?对,还有时钟!

关键字: 时钟系统 单片机 CPU

基于ARM® Cortex®-M4的STM32F4 MCU系列采用了意法半导体的NVM工艺和ART Accelerator™,在高达180 MHz的工作频率下通过闪存执行时其处理性能达到225 DMIPS/608 Cor...

关键字: stm32f4 ARM

stm32f4和f1都有哪些区别?除了需要的头文件不一样,管脚配置什么的有区别么?

关键字: stm32f4 f1 比较

STM32F407VET6引脚图及中文资料

关键字: stm32f4 引脚图

比较F1的片子对于F4的RTC来说有很大提升,F4的RTC提供了日历时钟和两个可编程闹钟中断,一个周期性可编程唤醒标志。这样很方便设置系统时间,并不会像F1的RTC那样要自己计算年月日时分秒。F4的RTC是一个独立的BC...

关键字: rtc stm32f4

【实验目的】输出7路占空比不同的PWM信号是各个版本ST库必备的例子。本实验的主要目的不是表现ST芯片PWM功能的强大,而是要完成输出的精确计算。【实验内容】输出7路PWM信号,并用示波器测量输出。【实验原理】1、时

关键字: pwm stm32f4 tim1 信号输出

STM32F4的随机数发生器RNG,以环境噪声为种子,产生32位随机数供主机使用。【主要特性】1、产生32位随机数 2、两次转换时间间隔40PLL48CLK 3、随机数熵检测以发现不正常位,以产生稳定序列 3、可被关闭以...

关键字: stm32f4 随机数发生器

书接上文,开始折腾ADC的DMA传输。因为大家都在说DMA,就连ST的例子里边也是使用DMA的。 ADC采集到的数据都存储在一个固定的寄存器中。当常规采样方式采样多个通道时候,使用DMA可以较好地避免将采集到的数据...

关键字: adc dma stm32f4 数据传输 采集数据

为了提搞系统的可靠性,STM32F4系列MCU有一个独立看门狗(IWDG)和一个窗口看门狗(WWDG)。今天做的实验是关于独立看门狗的。独立看门狗使用的时钟源是内部低速振荡器LSI。因为LSE可能没接,HSE可能坏点,H...

关键字: iwdg stm32f4 独立看门狗

对于串口就不多罗嗦了, 虽然串口是一种比较古老的接口, 速度较慢, 在计算机上早已淘汰, 但是由于它结构简单, 使用方便, 或许也由于在计算机上使用过有基础支撑(单片机就是在走曾经电脑走过的路), 在嵌入式系统中依然

关键字: stm32f4 usart配置
关闭
关闭