天天看点

总结C51、STM32和S3C2440的时钟体系和定时器

在这里简单介绍一些STM32的时钟树的主要部分:

总结C51、STM32和S3C2440的时钟体系和定时器

对于这个复杂的时钟树,它的来源可以为外部高速时钟、外部低速时钟、内部低速时钟、内部高速时钟(HSE、HSI、LSI、LSE)。当然,具体选择哪个需要根据需要。在这里选择一个主要的来讲:就是外部高速时钟(HSE)。然后,外部高速时钟经过锁相环(PLL)之后得到PLLCLK。再然后经过选择成为系统时(SYSCLK)系统时钟最大为72MHz。系统时钟一般经过分频之后,就输送给各个外设,就是接下来的步骤,即系统时钟经过AHB预分频得到APB总线时钟HCLK。再再然后,HCLK经过APB1分频得到PCLK1,以后输送给APB1外设(一些低速外设)。HCLK经过APB2分频得到PCLK2,以后输送给APB2外设(一些高速设备)。

基本的流程图为:HSE->PLLCLK->SYSCLK->HCLK->PCLK1(或PCLK2)。(结合STM32时钟树看更容易理解。)

这么复杂的时钟树,对于一些不用的设备就可以关闭其时钟,对于一些低速的设备提供低速的时钟信号,这样也就达到了节能的目的。也因为这个,我们在使用某个外设的时候,一般需要对应的打开其外设的时钟信号(默认是关闭的),哪怕只是点亮一个小小的LED灯。

对于S3C2440来说,它的时钟体系要比C51要复杂,但对于STM32来说,是简单不少了。简单说来,它有3种时钟:FCLK、HCLK、PCLK。其中FCLK用于CPU内核;HCLK用于AHB总线上的高速设备;PCLK用于APB总线上的低速设备。当系统刚上电时,FCLK等于外部输入的时钟(一般比较低)。然后然后可以通过软件启动MPLL(锁相环倍频)。倍频之后FCLK就变为倍频之后的时钟信号了。再然后,可以通过CLKDIVN寄存器设置FCLK、HCLK、PCLK的比例。时钟配置就结束了。是不是相对于STM32的时钟树要简单多了。对于具体的外设来说,也没有什么打开时钟、关闭时钟之说,因为据我估计这个时钟玩意一直是开启的。

再来总结下这三个芯片的定时器:

三个芯片定时器个性已经在以前的博客中说了。

共性嘛,现在想想,说起来一句话,都是对脉冲的计数。不同的是,高级一点的芯片,在这个计数基础上加了一些其他的功能(如PWM,输入捕获等等)。

补充

1、关于进一步理解单片机的时钟体系:

对于单片机来说,其系统各个部分的运行需要时钟的驱动。但是由于各个外设的速率并不相同,因此需要向不同外设输出不同的时钟频率。(对于C51来说,它的整个系统的时钟都是来自晶振)整个时钟体系的流程说到底就是:时钟来源(可以是外部晶振,也可以来自内部的RC振荡器)经过倍频、分频之后输送到不同的外设,供其工作。

2、关于时钟的开启与关闭:

由于不同的外设不一定同时工作,所以为了达到节省能耗的目的,有些单片机就给不同外设的时钟提供了开启和关闭功能,如S3C2440和STM32。不同的是默认情况下STM32的各个外设时钟是关闭的,所以即使点亮一个LED灯都需要开启时钟。而S3C2440的各个外设时钟默认都是开启的(可以配置,使其关闭)。

3、关于C51、STM32和S3C24400需要注意的地方:

1、C51的定时器,它的定时器周期是其机器周期(12时钟周期,或6时钟周期),这是有其硬件结构决定的。而STM32和S3C2440的定时器周期都是其配置的时钟周期(并不是机器周期)(对于高级一点的芯片,大都不太关注机器周期),对于STM32一般来自APB1,对于S3C2440一般来自PCLK。