主要是讲解怎么看懂这个图。
一、内置RC振荡器(HSI RC)
频率是约为8MHz,因为其频率不是很稳定。其可作为系统时钟的一个选项。
二、晶振振荡器(HSE OSC)
从图中可以看到其是一个高速的外部时钟。一般接一个8MHz的晶振,这个晶振可以是4-16MHz这个范围,其可以作为选择器PLLXTPRE的输入,也可以两分频后作为选择器PLLXTPRE的输入,还可以作为系统时钟的一个时钟源。
三、PLLMUL
这是一个倍频器,从图中可以看到,它可以将频率乘以2-16,得到翻倍的频率。倍频器的频率也可以作为系统时钟的一个时钟源。而倍频器的来源从图中也可以看到,其来源为HSI RC的两分频、HSE OSC、HSE OSC的两分频。
四、系统时钟
系统时钟是整个系统中最重要的部分,由前面三个可以知道,系统时钟的三个来源。
五、CSS
CSS是一个时钟监控单元,由于HSE OSC是一个外部的晶振提供的,所以有不确定性,CSS就是起到监控作用,一旦检测到外部晶振不起振就将时钟源更换为HSI RC。
六、LSE OSC
是一个外接的低速时钟源,其作用是给RTC时钟。RTC时钟的来源还可以是HSE OSC的128分频以及LSR RC。
七、LSR RC
是一个低速的内部时钟,频率约为40kHZ,也不是很稳定。可以作为独立看门口狗的时钟。
八、MSO
作为时钟的输出引脚,该引脚为PA8。频率来自系统时钟或者HSI RC、HSE OSC、PLLMUL的两分频。
九、USBCLK
来源是PLLMUL经过USB预分频器得到,可以是1倍或者1.5倍。
十、AHB
是一个分频器,可将系统时钟进行1-512分频。AHB分频后可以得到HCLK。AHB分频后再经过APB1、APB2分频可以给其它的外设使用,具体的可以通过图看到。所以当我们在使用外设时需要使能相应总线的时钟。
typedef struct
{
__IO uint32_t CR; //使能HSI、HSE、CSS、PLLMUL
__IO uint32_t CFGR; //时钟源选择以及分频系数的设置
__IO uint32_t CIR; //清除/使能时钟就绪中断
__IO uint32_t APB2RSTR; //APB2总线上外设复位寄存器
__IO uint32_t APB1RSTR; //APB1总线上外设复位寄存器
__IO uint32_t AHBENR; //DMA、SDIO等时钟的使能
__IO uint32_t APB2ENR; //APB2总线上外设时钟的使能
__IO uint32_t APB1ENR; //APB1总线上外设时钟的使能
__IO uint32_t BDCR; //备份域控制寄存器
__IO uint32_t CSR; //控制状态寄存器
#ifdef STM32F10X_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;