STM32--RCC时钟配置寄存器

RCC即复位和时钟配置,今天主要写一下RCC时钟配置。

下图为我从用户手册中截图截取出来的时钟树,

由图可以看出:

STM32中共有5个时钟源,其中三个主要用作于系统时钟来源,另外两个分别供RTC实时时钟和IWDGCLK独立看门狗时钟。

系统时钟源:

HSI:高速内部时钟,内部的RC振荡器产生,频率为8MHz。默认启动,但精度不高。

HSE:高速外部时钟,外部晶振产生,可直接作为系统时钟,频率范围为4MHz~16MHz

PLL:锁相环倍频输出,其时钟输入源可选择为HSI的二分频、HSE的一分频或二分频。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

多采用HSE高速外部时钟经过PLL倍频作为系统时钟。

LSE:低速外部时钟,时钟来源外部的晶振或者外部的时钟信号。多用于给RTC(实时时钟)供电。

LSI:低速内部时钟,精度不高(内部的RC时钟一般不稳定),多用做独立看门狗时钟。

配置时钟流程: 
1、将RCC寄存器重新设置为默认值                   RCC_DeInit 
2、打开外部高速时钟晶振                                 HSE RCC_HSEConfig(RCC_HSE_ON); 
3、等待外部高速时钟晶振工作                          HSEStartUpStatus =RCC_WaitForHSEStartUp();
4、设置AHB时钟                                               RCC_HCLKConfig; 
5、设置高速APB2时钟                                      RCC_PCLK2Config; 
6、设置低速APB1时钟                                      RCC_PCLK1Config 
7、设置PLL                                                       RCC_PLLConfig 
8、打开PLL                                                       RCC_PLLCmd(ENABLE); 
9、等待PLL工作                                                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) 
10、设置系统时钟                                             RCC_SYSCLKConfig 
11、判断是否PLL是系统时钟                            while(RCC_GetSYSCLKSource() != 0x08) 
12、打开要使用的外设时钟                               RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

以下为设置HSE高速外部时钟经PLL倍频器9倍频后作为系统时钟的设置过程:

 1 void RCC_Configuration(void)
 2 {
 3     ErrorStatus HSEStartUpStatus;                 /*定义枚举类型变量HSEStartUpStatus*/
 4     RCC_DeInit();                                 /*复位系统时钟设置*/
 5     RCC_HSEConfig(RCC_HSE_ON);                    /*开启HSE*/
 6     HSEStartUpStatus = RCC_WaitForHSEStartUp();   /*等待HSE起振并达到稳定*/
 7     if(HSEStartUpStatus == SUCCESS)               /*判断HSE是否起振成功,起振成功了则开始执行后面的配置*/
 8     {
 9         RCC_HCLKConfig(RCC_SYSCLK_Div1);          /*选择HCLK(AHB)时钟源作为SYSCLK1分频*/
10         RCC_PCLK2Config(RCC_HCLK_Div1);           /*选择PCLK2(APB2)时钟源为HCLK(AHB)1分频*/
11         RCC_PCLK1Config(RCC_HCLK_Div2);           /*选择PCLK1(APB1)时钟源为HCLK(AHB)2分频*/
12         FLASH_SetLatency(FLASH_Latency_2);        /*设置Flash延时周期数为2*/
13         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);     /*使能Flash预取缓存*/
14         RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);       /*选择PLL时钟源为HSE1分频,倍频数为9,即PLL=8MHz×9=72MHz*/
15         RCC_PLLCmd(ENABLE);               /*使能PLL*/
16         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);       /*等待PLL输出稳定*/
17         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                /*选择SYSCLK时钟源为PLL*/
18         while(RCC_GetSYSCLKSource()!=0x08);                       /*等待PLL成为SYSCLK时钟源*/
19     }
20     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         /*打开APB2总线上的GPIOB时钟*/
21 }

在V3.5版本的库函数中,对时钟频率的选择进行了优化,官方库函数默认使用了8MHz的高速外部晶振,在启动文件中直接定义了 硬件频率、系统时钟、AHB总线频率、APB1总线频率、APB2总线频率,所以在使用3.5版本的库函数时,无需再写前面的那些众多的配置,可以直接根据需要打开相应位置的时钟,就像上面就可以简化成:

1 void RCC_Configuration(void)
2 {
3     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
4 }

此一来就将RCC时钟配置简化了许多。

时间: 2024-10-10 05:43:49

STM32--RCC时钟配置寄存器的相关文章

STM32内部时钟设置-寄存器版

STM32寄存器版本--内部时钟设置 同时要记得把延时初始化函数设置好 1 //系统时钟初始化函数 2 //pll:选择的倍频数,从2开始,最大值为16 3 //pll:选择的倍频数,这里使用内部时钟,PLL为4就是4分频 4 void Stm32_Clock_Init(u8 PLL) 5 { 6 unsigned char temp=0; 7 MYRCC_DeInit(); //复位并配置向量表 8 // RCC->CR|=0x00010000; //外部高速时钟使能HSEON 9 RCC->

stm32 RCC 时钟分析

stm32芯片手册上有张图表示的很清楚,一共有4个时钟源: 1.HSI(内部高速时钟 8MHz)提供可以位系统时钟提供时钟源 2.HSE(外部高速时钟)可以提供系统时钟和RTC时钟时钟源 3.LSE(低速外部时钟32.768kHz)可以为可以为RTC提供时钟源 4.LSI(低速内部时钟)可以为独立看门狗提供时钟源 首先分析一下ST公司给的库函数:我用的是3.5的库 我们看看SystemInit里是什么 void SystemInit (void) { RCC->CR |= (uint32_t)0

STM32F407 RCC时钟配置

新上手项目需要使用STM32F407,在使用STM32F1系列时就喜欢自己用库函数设置系统时钟,所以F4也打算这么做,但是遇到了一些问题. 其中百度文库有篇文章关于RCC的文章将的不错,地址:http://wenku.baidu.com/link?url=6mbgKXNIhl4XGqnvp0GzCweLVfldIjzDUMo90lfcKx1YwC7d-3JX_S20ntl3uJPKQYa5JHHf-WtA6MthmWx6jzd8Ks674SX7CdC0tGRCPx3 我使用的也是其中的函数,但是

STM32系统时钟配置,滴答定时器配置相关

以后实在找不到问题出现在哪里,注意还有这么个地方需要留意: 今天在调试滴答定时器,找半天找不到延时为什么不准确,原来以前的代码中,"SYSCLK_FREQ_72MHz"被写成了64MHz了,把这里重新改为72MHz就可以了,走过的路过的,希望这个提醒可以对大家有所帮助,不过大家还是要看实际情况. 原文地址:https://www.cnblogs.com/data-base-of-ssy/p/9513371.html

rcc时钟

1.时钟源 在 STM32 中,一共有 5 个时钟源,分别是 HSI . HSE . LSI . LSE . PLL . ①HSI 是高速内部时钟, RC 振荡器,频率为 8MHz : ②HSE 是高速外部时钟,可接石英 / 陶瓷谐振器,或者接外部时钟源,频率范围是 4MHz – 16MHz : ③LSI 是低速内部时钟, RC 振荡器,频率为 40KHz : ④LSE 是低速外部时钟,接频率为 32.768KHz 的石英晶体: ⑤PLL 为锁相环倍频输出,严格的来说并不算一个独立的时钟源, P

STM32时钟配置方法

一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz. ③LSI是低速内部时钟,RC振荡器,频率为40kHz. ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体. ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2.HSE或者HSE/2.倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz. 二.在

[转] STM32各种时钟的区别

[原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32.     下面是从网上找的一个STM32时钟框图,比<STM32中文参考手册>里面的是中途看起来清晰一些:         重要的时钟:   PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚; 1.HSI:高速内部时钟信号 stm3

(六)STM32的时钟系统

   在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL (1) HSI是高速内部时钟,RC振荡器,频率为8MHz: (2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz: (3) LSI是低速内部时钟,RC振荡器,频率为40KHz: (4) LSE是低速外部时钟,接频率为32.768KHz的石英晶体: (5) PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2.HSE或者HSE/

STM32F0xx_RTC实时时钟配置详细过程

Ⅰ.概述 今天总结RTC(Real Time Clock)实时时钟相关的知识,顺带将BKP简单总结一下. STM32的RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后, RTC的设置和时间维持不变. STM32F0的RTC模块和F1的RTC模块最大区别在于F0模块中有“DATE”和“TIME”寄存器,也就是可以直接读取寄存器里面的值,而F1是秒计数寄存器的值,需要通过相关算法下才能得到时间的值. 本文提供的软件工程里面还包含一个BKP模块,主要是用于