zoukankan      html  css  js  c++  java
  • 彻底整明白STM32F030 的时钟

         

            STM32F030F4P6 的时钟系统是很强大的,一般强大意味着复杂,需要花时间去理解。直接看手册的时

    钟图会头晕的,按照俺滴思路可以事半功倍哦!其它类似芯片可参考本文。

    原版创作,引用请注明出处:https://www.cnblogs.com/beiyhs/p/11225502.html               北有寒山

           先上图,嗯,白害啪,很简单的。

      

           

                 STM32F030有4路时钟源:

            1  内部8MHz的高速RC振荡;优点是省钱、省钱、省钱,缺点是精度差点儿,差多少?手册上说误差在

                1%左右。什么概念?嗯,都按负偏差算的话一周168小时累计少1.68小时。

                       看来用它作长时间累计不太靠谱,用来作短时间的重复控制倒无所谓,挺好。

            2  外部4-32M晶体振荡;即OSC_OUT和OSC_IN2管脚接振荡晶体。你买的振荡晶体的精度有多高,时

                 间的精度就有多高,缺点是精度高的(低温漂)振荡晶体费钱。

            3  外部时间日历振荡;即OSC_32OUT和OSC_32IN管脚接32.768kHz振荡晶体,为嘛叫时间日历振荡

                尼?  鹰为这个32.768kHz振荡晶体用作时间日历来说比几M、几十M的振荡晶体更好分频取秒信号,不信

                拆了你的劳力士手表,里面也是这个玩意儿。

            4  内部低速40kHz的RC振荡;内部都有高速8M的RC振荡了干嘛又整出一个低速振荡来尼?嗯,用来喂

                程序看门狗挺好的。

                不对呀,说好的4路时钟源为嘛上图只有内部高速和外部高速2路尼?故意不画的,怕你看多了晕,嘿

        嘿!

                  没晕的话接着说,看一眼上图,内部8M振荡只能除以2后进选择开关1(PLLSRC)被选中,进入倍频

         模块(PLLMUL),可以选择2-16倍频,倍频后最高能到48MHz。之后被选择开关2选择,注意了选择开关2

         也可以选择8M内部振荡直通,缺点是频率只能到8MHz不能倍频。如被选择后进入AHB预分频器。

                 外部振荡可以选择4-32M的晶体,玩的花样也多些。比如内部8M振荡只能除以2后进选择开关1,而外

        部振荡可以除以1、2、..16,后进选择开关1(PLLSRC)被选中,进入倍频模块(PLLMUL)。但倍频后最

        高也是48MHz,这是芯片的命门,无法突破( 什么!你要超频???  %¥@…@)。其它同内部8M振荡一

        样都是进到AHB预分频器。

                AHB预分频器的分频系数可就多了去了,从1、2直到512。分频后就叫系统频率即HCLK,出来后其

        它不多说,重点说下有1路去了APB预分频器

                AHB去了APB、 AHB去了APB、AHB去了APB、AHB去了APB、AHB去了APB,重要的事情说5遍,为

        的是绕晕你,晕菜了吧!哈哈,不晕?再念8遍。

               吃货:      跑风了,应该是,

               释惑:

               AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种“系统总线”。多用于

                          如CPU、DMA和DSP等。

               APB,是Advanced Peripheral Bus的缩写,译作高级总线这是一种外围总线。多用于低速,各种串口,

                          普通TIM、ADC等。

              闭上眼想想,到底儿是AHB去了APB还是APB去了AHB?又晕菜了不是!!!!!

              来,记住了,水由高流向低,Bus也是,嗨B总比破B强啊,所以是A HB预分频后到A PB预分频器。

       在APB预分频器还得按2、4、6、8选择分频。咋这多分频尼??理解的都快吐了,没辙,王八屁股,龟腚。

       从APB预分频器出来就叫PCLK,去TIM的话还要进入倍频器

       如果APB预分频器的分频系数选1,则TIM的倍频器不倍频,直接入TIM1、3、14、16、17。

       如果APB分频系数选2、4、6、8、16,则TIM频率在倍频器乘以2再进TIM1、3、14、16、17。

               唉、终于进TIM了,好好费劲哦! 为啥要倍下频尼?因为在APB分频后要给低频外设用,但TIM可能需

        要高的频率,所以在APB分频后又加了个倍频。

               注意啊!其它相似芯片在APB和TIM倍频器之间还会有APB1或APB2预分频器的,该芯片木有滴,只

       有APB预分频器,但有叫RCC_APB1ENR的寄存器,这个寄存器像是个开关,一些外设使用,如USB、

       I2C、SPI、各个TIM使用前都要设置RCC_APB1ENR寄存器,把相应的开关位打开才能使用

       举个栗子:

              使用TIM3前都要有  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 

       这一句的作用就是设置RCC_APB1ENR的相关的位,打开APB到TIM3的通道开关。

        来,把上图的屎栗再捋一下:

        看上图红箭头线,假设选用内部RC的8M振荡,

            a   频率=8/2=4M,进选择开关1;

            b  进PLLMUL倍频器选择12倍频,频率=4M*12=48M

            c  进AHB分频器,分频系数选1,  频率=48M/1=48M

            d  进APB分频器,分频系数选1,  频率=48M/1=48M

            e  进倍频器,如APB分频器的分频系数选1,不倍频  频率=48M。最大输出频率可是不超过48M哦。

            f  进各TIM的时钟也叫来自RCC的CK_INT时钟,接着就是TIM内部寄存器的分频、计数设置了。

        注意,STM32F030F4P6可是没有TIM2、64、5、715等等哦,只有TIM1、3、14、16、17。

        TIM1是高鸡定时器;带输入捕捉、输出比较,三相PWM控制,上下计数模式。

        TIM3、14、16、17扑通定时器;上下计数模式,带输入捕捉、输出比较。

        

           

  • 相关阅读:
    Anaconda下载(改变了镜像路径,下载速度很快!!!)
    Class类文件结构
    JVM类加载过程
    端口占用问题解决办法(以1099端口为例)
    JVM垃圾回收算法(最全)
    Java多线程学习(总结很详细!!!)
    Shuffle过程
    RSA_RSA算法原理(一)
    Maven_根据不同个环境打包, 获取不同的配置文件等等
    Maven_如何为开发和生产环境建立不同的配置文件 --我的简洁方案
  • 原文地址:https://www.cnblogs.com/beiyhs/p/11225502.html
Copyright © 2011-2022 走看看