1. 程式人生 > 其它 >微控制器時鐘系統

微控制器時鐘系統

STM32微控制器的時鐘系統

晶片的主晶振頻率範圍一般來說在資料手冊(Datasheet)和技術參考手冊(Technical Reference Manual)中都有介紹,對應引腳OSC_IN和OSC_OUT.

 

 

 

 

 

 

HSI:高速內部時鐘,RC振盪器,頻率8MHz,精度不高。
HSE:高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率範圍為4MHz~16MHz,一般我取8M。
LSI:低速內部時鐘,RC振盪器,頻率40kHz,低功耗時鐘,至WDG獨立看門狗。
LSE:低速外部時鐘,接頻率為32.768kHz的石英晶體或陶瓷諧振器,RTC實時時鐘。
PLL:鎖相環倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。 倍頻可選擇為2~16倍,其輸出頻率最大為72MHz。

在這個圖的正中央,有一個核心時鐘:SYSCLK,它最大頻率是72MHz,它的時鐘訊號通過選擇器SW可以由PLLCLK提供(也可由HIS、HSE提供)。

PLL,毫無疑問,它是用來倍頻的,可以*2,*3,*4……*16,它的時鐘訊號通過選擇器PLLSRC可以由8MHz的高速內部RC振盪器經過二分頻提供,也可由PLLXTPRE的選擇器輸出提供,

而PLLXTPRE的選擇器就接的是我們的8MHz的高速外部時鐘(直接接入或二分頻接入)。

 

總的來說,對於我們這個板子,若使用高速外部時鐘給STM32核心提供時鐘源,一般以下兩條路:

① [高速外部時鐘:8MHz]>>>[不分頻:8MHz]>>>>[PLL倍頻,2到16倍]>>>[SYSCLK,16MHz-128MHz]

 

②[高速外部時鐘:8MHz]>>>[二分頻:4MHz]>>>>[PLL倍頻,2到16倍]>>>[SYSCLK,8MHz-64MHz]

 

我們注意到,在8MHz外部時鐘給PLL之前若分頻的話,那麼最大(×16)才64MHz,因此,我們都會給PLL以8MHz的時鐘源讓其倍頻,這樣能使它發揮到72MHz的高頻率

正因如此,系統時鐘總是8的倍數。

 

我們看這個晶片的資料手冊,立刻就能明白,不是必須得接8MHz的晶振的

① 高速外部時鐘源頻率範圍(P55-P58):1MHz~25MHz(有源);4MHz~16MHz(無源)

② PLL輸入時鐘源頻率範圍(P62):1MHz-25MHz

③ PLL輸出時鐘源頻率範圍(P62):16MHz~72MHz

我們自己設計板子的時候只要滿足它的範圍就可以了。

例如:我們可以選擇一個12MHz的無源晶體接到STM32晶片上。

在給STM32進行時鐘配置的時候,

① 選擇PLLXTMRE的輸入源為12MHz/2 = 6MHz

② 選擇PLLSRC的輸入源為PLLXTMRE的輸出6MHz,

③ 在PLL內進行3到12倍的倍頻(最小16MHz,最大72MHz),

最終我們可選擇的頻率就有:18MHz、24MHz、30MHz、36MHz、42MHz、48MHz、54MHz、60MHz、66MHz、72MHz

參考https://blog.csdn.net/weixin_42341666/article/details/108526787

 

 

51微控制器:

 

 

      時鐘週期,或者也叫做節拍,另外一個叫做狀態週期S,還有一個機器週期和指令週期,這是微控制器當中的幾個時鐘的一個概念,其中時鐘週期也叫振盪週期,它是晶振頻率的倒數,比如說12MHz的晶振,這個時鐘週期就是12MHz分之一秒,這個就叫做一個節拍,兩個節拍構成一個狀態週期就是1/12乘以二,就是1/6,就是六MHz分之一秒,這個是狀態週期。機器週期是由12個時鐘週期構成的,機器週期就是12MHz乘以12,12MHz分之一乘以12就是一個微秒,指令週期是由機器週期來構成的,       普通的51微控制器我們叫做12T的微控制器,指佔12個時鐘週期,也就是佔12個時鐘週期的微控制器,我們叫做12T的微控制器。也就是說它只有在12個時鐘週期裡面才能完成一個最基本的微操作,比如說執行一個最簡單的指令,比如說note指令,但是現在有很多微控制器都是1T的微控制器,當然還有2T的微控制器,這種微控制器它比我們這種12T微控制器速度肯定更快,因為它在一個時鐘週期裡面就能夠完成一個基本操作,而我們這個需要12個時鐘週期才能完成,就相當於同樣幹一件事情啊,有的人可能需要十分鐘幹完了,但是有的人需要120分鐘才能幹完,就是這個道理,就是說它的效率不一樣,執行的速度不一樣,這個就是我們這幾個概念要搞清楚的。        時鐘振盪器產生的,比如說你是一個12兆的晶振,產生一個啊波形,那這個波形就是一秒鐘可以震盪12兆次,12兆次這個是頻率,它的週期呢,就是12兆分之一,我們叫做時鐘週期,或者叫作振盪週期,這個就就很容易理解了。
連結:https://www.zhihu.com/question/30930577/answer/2365562178

 

 

 

FPGA時鐘:

FPGA的晶振是50MHz,50MHz = 50_000_000Hz = 1/50_000_000s = 20ns

即每次時鐘(clk)上升沿(posedge)每50Mhz(20ns)到來一次。

always@(posedge clk)