STM32 CubeIDE(五)AMBA與時鐘樹

2021-10-13 17:58:44 字數 3506 閱讀 1634

amba

amba(advanced microprocessor bus architecture)是arm公司提出的一種開放性的soc匯流排標準,廣泛的應用於risc核心,已成為一種流行的工業標準片上結構。

amba規範主要包括了ahb(advanced high performance bus)系統匯流排和apb(advanced peripheral bus)外圍匯流排。

stm32f407也採用了amba標準,需要關注的是ahb、apb1、apb2這三條匯流排。

ahb匯流排應用於高效能模組之間的鏈結,如cpu、dma、儲存器、攝像頭、乙太網等。

apb1為慢速外圍匯流排,下掛tim2-tim5、串列埠2-5、spi2-spi3、iic、can等。

apb2為快速外圍匯流排,下掛tim1、tim8、tim9-tim11、串列埠1、串列埠6、spi1、adc等。

時鐘樹

時鐘是微控制器執行的基礎,時鐘訊號推動微控制器內各個部分執行相應的指令。時鐘系統就是cpu的脈搏,決定cpu速率,像人的心跳一樣 只有有了心跳,人才能做其他的事情,而微控制器有了時鐘,才能夠執行執行指令,才能夠做其他的處理 (點燈,串列埠,adc),時鐘的重要性不言而喻。

stm32本身十分複雜,外設非常多 但我們實際使用的時候只會用到有限的幾個外設,使用任何外設都需要時鐘才能啟動,但並不是所有的外設都需要系統時鐘那麼高的頻率,為了相容不同速度的裝置,有些高速,有些低速,如果都用高速時鐘,勢必造成浪費 並且,同乙個電路,時鐘越快功耗越快,同時抗電磁干擾能力也就越弱,所以較為複雜的mcu都是採用多時鐘源的方法來解決這些問題。所以便有了stm32的時鐘系統和時鐘樹。

①hse 高速外部時鐘訊號

hse 是高速的外部時鐘訊號,可以由有源晶振或者無源晶振提供,頻率從 4-26mhz不等。當使用有源晶振時,時鐘從 osc_in 引腳進入,osc_out 引腳懸空,當選用無源晶振時,時鐘從 osc_in 和 osc_out 進入,並且要配諧振電容。如果我們使用 hse 或者 hse 經過 pll 倍頻之後的時鐘作為系統時鐘 sysclk, 當 hse 故障時候,不僅 hse 會被關閉,pll 也被關閉,此時高速的內部時鐘時鐘訊號hsi 會作為備用的系統時鐘,直到 hse 恢復正常,hsi=16m。

②鎖相環 pll

pll 的主要作用是對時鐘進行倍頻,然後把時鐘輸出到各個功能部件。pll 有兩個,乙個是主 pll,另外乙個是專用的 plli2s,他們均由 hse 或者 hsi 提供時鐘輸入訊號。

主 pll 有兩路的時鐘輸出,第乙個輸出時鐘 pllclk 用於系統時鐘,f407 裡面最高是 168m,第二個輸出用於 usb otg fs 的時鐘(48m)、rng 和 sdio 時鐘(<=48m)。專用的 plli2s 用於生成精確時鐘,給 i2s 提供時鐘。

hse 或者 hsi 經過 pll 時鐘輸入分頻因子 m(2~63)分頻後,成為 vco 的時鐘輸入,

vco 的時鐘必須在 1~2m 之間,我們選擇 hse=25m 作為 pll 的時鐘輸入,m 設定為 25,

那麼 vco 輸入時鐘就等於 1m。

vco 輸入時鐘經過 vco 倍頻因子 n 倍頻之後,成為 vco 時鐘輸出,vco 時鐘必須在 192~432m 之間。我們配置 n 為 336,則 vco 的輸出時鐘等於 336m。如果要把系統時鐘超頻,就得在 vco 倍頻係數 n 這裡做手腳。pllclk_outmax = vcoclk_outmax/p_min = 432/2=216m,即 f407 最高可超頻到 216m。

vco 輸出時鐘之後有三個分頻因子:pllclk 分頻因子 p,usb otg fs/rng/sdio時鐘分頻因子 q,分頻因子 r(f446 才有,f407 沒有)。p 可以取值 2、4、6、8,我們配置為 2,則得到 pllclk=168m。q 可以取值 4~15,但是 usb otg fs 必須使用 48m,

q=vco 輸出時鐘 336/48=7。

pll 的時鐘配置經過,稍微整理下可由如下公式表達:

vcoclk_in = pllclk_in / m = hse / 25 = 1m

vcoclk_out = vcoclk_in * n = 1m * 336 = 336m

pllclk_out=vcoclk_out/p=336/2=168m

usbclk = vcoclk_out/q=336/7=48m

③系統時鐘 sysclk

系統時鐘**可以是:hsi、pllclk、hse,具體的由時鐘配置暫存器 rcc_cfgr的 sw 位配置。我們這裡設定系統時鐘:sysclk = pllclk = 168m。如果系統時鐘是由hse 經過 pll 倍頻之後的 pllclk 得到,當 hse 出現故障的時候,系統時鐘會切換為hsi=16m,直到 hse 恢復正常為止。

④ahb 匯流排時鐘 hclk

系統時鐘 sysclk 經過 ahb 預分頻器分頻之後得到時鐘叫 ahb 匯流排時鐘,即 hclk,分頻因子可以是:[1,2,4,8,16,64,128,256,512],具體的由時鐘配置暫存器rcc_cfgr 的 hpre 位設定。片上大部分外設的時鐘都是經過 hclk 分頻得到,至於 ahb匯流排上的外設的時鐘設定為多少,得等到我們使用該外設的時候才設定,我們這裡只需粗線條的設定好 apb 的時鐘即可。我們這裡設定為 1 分頻,即 hclk=sysclk=168m。

⑤apb2 匯流排時鐘 pclk2

apb2 匯流排時鐘 pclk2 由 hclk 經過高速 apb2 預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置暫存器 rcc_cfgr 的 ppre2 位設定。hclk2 屬於高速的匯流排時鐘,片上高速的外設就掛載到這條匯流排上,比如全部的 adc、usart1、spi1等。至於 apb2 匯流排上的外設的時鐘設定為多少,得等到我們使用該外設的時候才設定,我們這裡只需粗線條的設定好 apb2 的時鐘即可。我們這裡設定為 2 分頻,即 pclk2 = hclk /2= 84m。

⑥apb1 匯流排時鐘 pclk1

apb1 匯流排時鐘 pclk1 由 hclk 經過低速 apb 預分頻器得到,分頻因子可以是:[1,2,4, 8,16],具由時鐘配置暫存器 rcc_cfgr 的 ppre1 位設定。hclk1 屬於低速的匯流排時鐘,最高為 42m,片上低速的外設就掛載到這條匯流排上,比如usart2/3/4/5、spi2/3,i2c 等。至於 apb1 匯流排上的外設的時鐘設定為多少,得等到我們使用該外設的時候才設定,我們這裡只需粗線條的設定好 apb1 的時鐘即可。我們這裡設定為 4 分頻,即 pclk1 = hclk/4 = 42m。

使用cubeide或cubemx可以快速配置rcc時鐘樹。

STM32CubeIDE入坑指南

stm32cubeide使用筆記 01 基礎說明與開發流程 stm32cubeide使用筆記 02 stm32cubemx配置與 生成 stm32cubeide使用筆記 03 使用st link除錯程式 stm32cubeide使用筆記 04 雜項記錄 要點 方法 技巧等等 stm32cubeide...

STM32CubeIDE 介紹及安裝

安裝官網位址 stm32cubeide是乙個多功能的整合開發工具,整合了truestudio和stm32cubemx,它是stm32cube軟體生態系統的一部分。stm32cubeide是乙個先進的c c 開發平台,具有stm32微控制器的ip配置,生成,編譯和除錯功能。它基於eclipse cdt...

STM32CubeIDE 多通道ADC DMA轉換

1 adc1引數設定如下,本歷程開啟了9路adc通道 2 設定dma 3 設定dma資料寬度,把資料寬度有預設的half word改為word,否則兩路的adc值會合併成乙個資料 採集 如下 user code begin header starttaskchecktemp uint32 t adc...