天天看點

總結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。