Bootstrap

STM32库函数的学习5——时钟选择

        之前学过晶振的选择时候有研究过时钟的皮毛。

        STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。    

        ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,因为由内部的RC振荡器产生的,所以精度不高。  

        ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。官方的例程是8MHz的,我们常用的也是8MHz。

        ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG  ,独立看门狗的时钟。

        ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC,实时时钟来源要求很高,所以最好是外部晶振来提供时钟,我以前只知道这个可以作为实时时钟来累计,需要外接电池来供电的,毕竟断电,会停止计时的。在时钟框图发现,也可以是来自HSE高速外部时钟/128来获得,所以我个人感觉可以不用焊接32.768kHz来作为实时时钟,可以来自8MHz的时钟来除以128作为实时时钟。这里编程时候可以尝试用一下,目前只是理论想法。

        ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。作为模电,也是工作以后就丢了不少呢,所以这里可以当成是一个倍频器来理解。这里的定时,pwm波等来设置。

        系统时钟SYSCLK可来源于三个时钟源:

        ①、HSI振荡器时钟

        ②、HSE振荡器时钟

        ③、PLL时钟

        MCO输出时钟:STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL   输出的2分频、HSI、HSE、或者系统时钟,这个以前不清楚,没用过,因为我很少会用到计时什么的,所以对计时什么的要求还真不高,也就从来不把PA8当输出时钟使用,估计用的时候一般是做I/O口了。

        任何一个外设在使用之前,必须首先使能其相应的时钟。

        几个重要的时钟:

        SYSCLK(系统时钟) :  

        AHB总线时钟

        APB1总线时钟(低速): 速度最高36MHz  

        APB2总线时钟(高速): 速度最高72MHz

        PLL时钟

        RCC相关配置寄存器://这个结构体,我直接使用库函数,并没有深究。

        typedef struct {  

         __IO uint32_t CR;                //HSI,HSE,CSS,PLL等的使能和就绪标志位  

         __IO uint32_t CFGR;           //PLL等的时钟源选择,分频系数设定  

         __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;            //控制状态寄存器

         } RCC_TypeDef;

        这个跟功耗也有很多关系,以前都是混囵吞枣的用上,估计耗电很高吧。以后根据需要可能需要仔细斟酌程序吧。毕竟我以前观念就是提前开启,之后就不用担心了。就像我所以库都加载呢。实际上,用到多少就加载多少。

        补:这里先备注这里,到时写延时跟时钟函数会深入运用。

;