在算已經入門了stm32之後(其實也不算入門了,只是會使用stm32的各種外設,會gpio,會復用,能使用spi,串列埠,會輸出pwm,會定時器,剛剛實現乙個無線通訊控制步進電機按照一定流程運動,下一步打算移植ucosiii到板子中),在這之前覺著好像僅僅只是會使用stm32,能看得懂例程,但是對於一些原理性的東西好像很模糊,覺著要重新學習一遍stm32f4,然後搞明白以前很模糊的一些概念和原理。
首先要搞清楚的是時鐘系統。上圖
stm32的外設很多,並不是所有的外設都需要像系統時鐘那麼高的頻率,rtc+看門狗只需要幾十k即可。頻率越高,功耗越大,抗電磁干擾能力越弱,所以在stm32中不像51只有乙個時鐘源。
stm32f4中有5個最重要的時鐘源:
hsi-高速內部時鐘(rc振盪器產生,16m,可作為系統時鐘)
hse-高速外部時鐘(外部晶振,一般用8m晶振)
lsi-低速內部時鐘(rc振盪器產生,32khz左右,供看門狗和自動喚醒單元使用)
lse-低速外部時鐘(32.768khz外部晶振,主要為rtc時鐘源)
pll-鎖相環倍頻輸出(分為主pll和專用pll)
pll的**其實是hsi或者hse。
主pll(pll):具有兩個不同的輸出時鐘(pllp,pllq)。
pllp用於生成高速系統時鐘(sysclk,最高168mhz)
pllq用於成成usb otg fs的時鐘(48mhz),
專用pll(plli2s):在i2s介面實現高品質音訊。
pllp->sysclk 計算系統頻率的方法:
(eg. 外部晶振8m 分頻係數m=8 倍頻係數n=336 分頻係數p=2)
則: pllp=8mhz * n / (m * p) = 168mhz
系統時鐘為ptp(乙太網時鐘),ahb,apb1,apb2作為時鐘源。
注意:ptp使用系統時鐘頻率,ahb,apb1,apb2都是經過分頻之後的時鐘。
ahb最高168mhz apb2最高84mhz apb1最高42mhz
最後總結一下systeminit()函式中設定的系統時鐘的大小:
sysclk(系統時鐘):168mhz
ahb(hclk=sysclk):168mhz
apb1(pclk1=sysclk/4):42mhz
apb2(pclk2=sysclk/2):84mhz
pll主時鐘:168mhz
stm32f1時鐘分析
stm32片上時鐘分析,指出3.5韌體庫乙個bug 一 前言 1 本文主要討論系統時鐘以至外設時鐘之間的源流關係。介紹stm32的片上時鐘系統,描述系統時鐘初始化函式systeminit 對時鐘的控制 從hse到sysclk,第二節 與配置 sysclk到外設,第三節 2 103與107所用時鐘系統...
STM32F1時鐘系統簡單分析
時鐘系統是cpu的脈搏,所以說要想深入理解stm32的外設,學習時鐘系統是非常有必要的。首先,讓我們看看網上找到的stm32f1時鐘框圖 在stm32中,有5個時鐘源,為hsi hse lsi lse和pll。從時鐘頻率來分可以分為高速時鐘源和低速時鐘源,在這5個中his hse以及pll是高速時鐘...
STM32時鐘系統
下面我們根據這張圖說說有關stm32時鐘系統的那些事 io uint32 t cr hsi,hse,css,pll等的使能和就緒標誌位 io uint32 t cfgr pll等的時鐘源選擇,分頻係數設定 io uint32 t ahbenr dma,sdio等時鐘使能 io uint32 t ap...