当前位置:首页 > > 充电吧
[导读]一、时钟树       普通的MCU,一般只要配置好GPIO 的寄存器,就可以使用了。STM32为了实现低功耗,设计了非常复杂的时钟系统,必须开启外设时钟才能使用外设资源。        左边开始,从

一、时钟树

       普通的MCU,一般只要配置好GPIO 的寄存器,就可以使用了。STM32为了实现低功耗,设计了非常复杂的时钟系统,必须开启外设时钟才能使用外设资源。

        左边开始,从时钟源一步步分配 到外设时钟。

        从时钟频率来说,又分为高速时钟和低速时钟,高速时钟是提供给芯片主体的主时钟,而低速时钟只是提供给芯片中的 RTC(实时时钟)及独立看门狗使用。

        从芯片角度来说,时钟源分为内部时钟与外部时钟源,内部时钟是在芯片内部 RC 振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用 内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号。

 

二、4个时钟源

高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用 8MHz 的晶振。

高速内部时钟(HSI): 由内部 RC 振荡器产生,频率为 8MHz,但不稳定。

低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模 块,所以一般采用 32.768KHz。

低速内部时钟(LSI):由内部 RC 振荡器产生,也主要提供给实时时钟模 块,频率大约为 40KHz。

 

三、高速外部时钟HSE分析(8M)

1、 从左端的 OSC_OUT 和 OSC_IN 开始,这两个引脚分别接到外部晶振的两端。

2、 8MHz 的时钟遇到了第一个分频器PLLXTPRE( HSEdivider for PLLentry),在这个分频器中,可以通过寄存器配置,选择它的输出。它的 输出时钟可以是对输入时钟的二分频或不分频。我们选择不分频,所以经过PLLXTPRE后,还是 8MHz 的时钟。

3、 8MHz 的时钟遇到开关PLLSRC(PLL entryclock source),我们可以选择其输出,输出为外部高速时钟( HSE)或是内部高速时钟 ( HSI)。这里选择输出为 HSE,接着遇到锁相环PLL, 具有倍频作 用,在这里我们可以输入倍频因子PLLMUL(PLLmultiplicationfactor)。经过PLL 的时钟称为 PLLCLK。倍频因子我们设定为 9 倍频,也就是说,经过PLL之后,我们的时钟从原来 8MHz 的 HSE 变为 72MHz。

4、 紧接着又遇到了一个开关SW,经过这个开关之后就是 STM32 的系统时钟(SYSCLK)了。通过这个开关,可以切换SYSCLK 的时钟源,可以选择为 HSI、 PLLCLK、 HSE。我们选择为 PLLCLK 时钟,所以 SYSCLK 就 为 72MHz 了。

5、 PLLCLK 在输入到 SW 前,还流向了 USB 预分频器,这个分频器输出为USB 外设的时钟( USBCLK)。

6、 回到 SYSCLK, SYSCLK 经过 AHB预分频器,分频后再输入到其它外设。如输出到称为HCLK、 FCLK 的时钟,还直接输出到 SDIO 外设的SDIOCLK 时钟、存储器控制器 FSMC 的 FSMCCLK 时钟,和作为 APB1、APB2 的预分频器的输入端。设置 AHB 预分频器不分频,即输出的频率为 72MHz。
7、 GPIO 外设是挂载在 APB2 总线上的, APB2 的时钟是APB2预分频器 的输出,而 APB2 预分频器的时钟来源是AHB预分频器。因此,把APB2 预分频器设置为不分频,那么我们就可以得到GPIO外设的时钟也等于HCLK。

 

四、HCLK、 FCLK、 PCLK1、 PCLK2

SYSCLK:系统时钟, STM32大部分器件的时钟来源。主要由AHB 预分频器分配到各个部件。

HCLK:由 AHB 预分频器直接输出得到,它是高速总线 AHB 的时钟信号,提供给存储器,DMA 及cortex 内核,是cortex 内核运行的时钟,cpu主频就是这个信号,它的大小与STM32 运算速度,数据存取速度密切相关。

FCLK:同样由 AHB 预分频器输出得到,是内核的“自由运行时钟”。“自由”表现在它不来自时钟HCLK,因此在HCLK时钟停止时FCLK也继续运行。它的存在,可以保证在处理器休眠时,也能够采样和到中断和跟踪休眠事件。

PCLK1:外设时钟,由 APB1预分频器输出得到,最大频率为36MHz, 提供给挂载在 APB1 总线上的外设。

PCLK2:外设时钟,由 APB2预分频器输出得到,最大频率可为72MHz,提供给挂载在 APB2 总线上的外设。

 

五、寄存器


//=================================================================
typedef struct
{
  __IO uint32_t CR;       // 时钟控制寄存器
  __IO uint32_t CFGR;     // 时钟配置寄存器
  __IO uint32_t CIR;      // 时钟中断寄存器
  __IO uint32_t APB2RSTR; // APB2外设复位寄存器
  __IO uint32_t APB1RSTR; // APB1外设复位寄存器
  __IO uint32_t AHBENR;   // AHB外设时钟使能寄存器
  __IO uint32_t APB2ENR;  // APB2外设时钟使能寄存器
  __IO uint32_t APB1ENR;  // APB1外设时钟使能寄存器
  __IO uint32_t BDCR;     // 备份域控制寄存器
  __IO uint32_t CSR;      // 控制/状态寄存器

#ifdefSTM32F10X_CL
  __IO uint32_t AHBRSTR;
  __IO uint32_t CFGR2;
#endif/* STM32F10X_CL */

#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined(STM32F10X_HD_VL)
  uint32_t RESERVED0;
  __IO uint32_t CFGR2;
#endif/* STM32F10X_LD_VL || STM32F10X_MD_VL || STM32F10X_HD_VL */
} RCC_TypeDef;
#define CRC_BASE            (AHBPERIPH_BASE +0x3000)
#define RCC                 ((RCC_TypeDef *)RCC_BASE)

voidRCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    RCC->APB2ENR |= RCC_APB2Periph;
  }
  else
  {
    RCC->APB2ENR &= ~RCC_APB2Periph;
  }
}


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

单片机定时器是一种用于计时和定时操作的功能模块。它通常用于生成延时、计数事件以及产生精确的时间间隔信号。

关键字: 定时器 时钟源

“在依然能够获得良好SNR结果的情况下,最差情况的ADC时钟可怎样呢?”虽然从来没有客户直接向我提及这一问题,但我的确定期地被问到有关采用不适合高分辨率ADC的时钟源之问题。

关键字: ADC 时钟源

“在依然能够获得良好 SNR 结果的情况下,最差情况的 ADC 时钟可怎样呢?”虽然从来没有客户直接向我提及这一问题,但我的确定期地被问到有关采用不适合高分辨率ADC的时钟源之问题。

关键字: ADC 时钟源

一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题。直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题。这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻,手册上要求使用6pf...

关键字: lse rtc STM32 时钟源

在STM32F1系列中,其中定时器TIM1、TIM8是挂在在APB2上的,而定时器TIM2、3、4是关在在APB1上的。在工程中我们一般设置APB1CLK = 36M APB2CLK = 72M但是为什么这几个定时器在计...

关键字: STM32 定时器 时钟源

引言在高加速度环境下,由于石英晶体振荡器本身的机械特性,它在100000g的情况下,自身就有损坏的可能。而硅振荡器启动一致和快速,不像RC电路那样易受到性能欠佳问题的阻扰

关键字: 时钟源 晶体振荡器 电源技术解析 双晶体

时钟分类stm32f4的时钟有很多分支,主要分为主系统的时钟和一些外设时钟,主系统的时钟又通过AHB分频,分出了HCLK到AHB总线内核的时钟,cortex系统定时器时钟,FLCK自由运行时钟。PHY以太网和USB和看门...

关键字: stm32f4 时钟树 分析配置

AHB :AHB:Advanced High-performance BusAHB和和和和APB这两种总线所连的外设是有区别的这两种总线所连的外设是有区别的这两种总线所连的外设是有区别的这两种总线所连的外设是有区别的。A...

关键字: STM32 时钟树 系统结构

最近学习下STM32F4的芯片,首先还是要了解时钟系统。库函数调用函数static void SetSysClock(void)初始化时钟。依次初始化HCLK、 PCLK2、PCLK1、PLL。最后打开PLLstatic...

关键字: stm32f407 时钟树

摘要在各种应用中(从通信基础设施到仪器仪表),对系统带宽和分辨率的更高要求促进了将多个数据转换器以阵列形式连接的需求。

关键字: 时钟树 采样时钟 同步数据转换
关闭