天天看點

STM32F4時鐘樹

時鐘是單片機的心髒,重要性不言而喻,STM32F4的時鐘樹是比較複雜的,是以不是一言兩語能寫清楚的,我隻簡單的描述下時鐘來源,詳細知識需要去看正點原子的視訊講解。

STM32F4時鐘樹
STM32F4時鐘樹

整個時鐘來源有五個:

1.LSI(Low Speed Interior)低速内部時鐘,是由内部RC振蕩器産生的不怎麼精确的時鐘,主要用來給看門狗提供時鐘頻率。看門狗的作用可以簡單了解是為了防止程式跑飛了,就是檢測是系統故障的一個功能。

2.LSE(Low Speed Exterior)低速外部時鐘,是外接32MHz的晶振。主要是給RTC提供時鐘頻率。RTC是實時時鐘,功能和定時器差不多。

3.HSI高速内部時鐘,由RC振蕩器産生。

4.HSE高速外部時鐘,由外接晶振産生,頻率在4-26MHz之内。

5.PLLCLK(Phase Loked Loop)鎖相環時鐘,至于鎖相環是幹嘛用的,百度講的比我清楚:鎖相環百科

那麼為什麼要這麼多時鐘源幹嘛?主要還是為了降低功耗,因為好多外設并不需要那麼高的頻率。

系統時鐘主要是由主PLL産生,如圖

STM32F4時鐘樹

上面的為主PLL,時鐘來源有HSI和HSE。一般選擇來源是HSE外接4-26MHz的晶振,具體是多少要看闆子的電路圖,然後還要修改庫函數裡的預設的頻率。系統時鐘頻率雖然說最高是168MHz,但是已經定死了預設是168MHz,不好修改。

STM32F4時鐘樹

是以有個公式SYSCLK=168=f/M*(N/P),f為PLL輸出頻率,M為HSI或HSE分頻數,N和P為鎖相環内部倍頻和分頻數,N為336,P為2。由于PLL時鐘來源我們選擇的是HSE,根據我們給的晶振來的,是以要在system_stm32f4xx.c檔案裡面隻需要修改M的值為你的HSE晶振的值即可,一般為8MHz晶振是以M為8,這樣sysclk=8M/8*(336/2)=168M。