STM32F1時鐘系統簡單分析

2021-09-24 13:06:13 字數 3042 閱讀 4652

時鐘系統是cpu的脈搏,所以說要想深入理解stm32的外設,學習時鐘系統是非常有必要的。首先,讓我們看看網上找到的stm32f1時鐘框圖:

在stm32中,有5個時鐘源,為hsi、hse、lsi、lse和pll。從時鐘頻率來分可以分為高速時鐘源和低速時鐘源,在這5個中his、hse以及pll是高速時鐘,lsi和lse是低速時鐘。從**可分為外部時鐘源和內部時鐘源,外部時鐘源就是從外部通過接晶振的方式獲取時鐘源,其中hse和lse是外部時鐘源,其他的是內部時鐘源。

下面我們具體分析這5個時鐘源:

從上面我們已經基本理解stm32的5個時鐘源的特性,那麼這個5個時鐘源主要是給什麼外設和系統提供時鐘的呢?我們繼續從《stm32中文參考手冊_v10》提供的時鐘框圖繼續分析。

;}

使用hse時鐘,程式設定時鐘引數流程:將rcc暫存器重新設定為預設值(rcc_deinit)開啟外部高速時鐘晶振hse(rcc_hseconfig(rcc_hse_on))等待外部高速時鐘晶振工作(hsestartupstatus = rcc_waitforhsestartup())設定ahb時鐘(rcc_hclkconfig)設定高速ahb時鐘(rcc_pclk2config)設定低速速ahb時鐘(rcc_pclk1config)設定pll(rcc_pllconfig)開啟pll(rcc_pllcmd(enable))等待pll工作(while(rcc_getflagstatus(rcc_flag_pllrdy) == reset))設定系統時鐘(rcc_sysclkconfig)判斷是否pll是系統時鐘(while(rcc_getsysclksource() != 0x08))開啟要使用的外設時鐘(rcc_apb2periphclockcmd()/rcc_apb1periphclockcmd())

reset_handler   proc

export reset_handler [weak]

import __main

import systeminit

ldr r0,

=systeminit

blx r0

ldr r0,

=__main

bx r0

endp

.......

..

通過分析stm32的啟動過程,我們可以知道微控制器復位後會呼叫外部檔案的systeminit函式。

void systeminit (

void

)static

void

setsysclock

(void

)

通過分析這兩個庫函式,我們可以知道要設定系統時鐘無非就是對一些巨集定義的設定,其餘的工作庫函式已經幫我們做了。所以我們只需對應開啟所需的頻率設定巨集定義即可,比如我們需要配置72mhz的頻率時鐘。

#if defined (stm32f10x_ld_vl) || (defined stm32f10x_md_vl) || (defined stm32f10x_hd_vl)

/* #define sysclk_freq_hse hse_value */

#define sysclk_freq_24mhz 24000000

#else

/* #define sysclk_freq_hse hse_value */

/* #define sysclk_freq_24mhz 24000000 */

/* #define sysclk_freq_36mhz 36000000 */

/* #define sysclk_freq_48mhz 48000000 */

/* #define sysclk_freq_56mhz 56000000 */

#define sysclk_freq_72mhz 72000000

#endif

這裡總結一下systeminit()函式中設定的系統時鐘大小:sysclk(系統時鐘) = 72mhzahb匯流排時鐘(使用sysclk) = 72mhzapb1匯流排時鐘(pclk1) = 36mhzapb2匯流排時鐘(pclk2) = 72mhz

pll時鐘 = 72mhz

通過簡單分析stm32的時鐘系統,我們可以初步了解stm32的系統架構,對我們深度學習stm32有很大的助力。由於庫函式提供的時鐘頻率並沒有64mhz,如果有專案需要使用內部hsi倍頻至64mhz的,請參考:stm32f1一種相對簡單的使用hsi配置系統時鐘為64mhz的方

stm32f1時鐘分析

stm32片上時鐘分析,指出3.5韌體庫乙個bug 一 前言 1 本文主要討論系統時鐘以至外設時鐘之間的源流關係。介紹stm32的片上時鐘系統,描述系統時鐘初始化函式systeminit 對時鐘的控制 從hse到sysclk,第二節 與配置 sysclk到外設,第三節 2 103與107所用時鐘系統...

STM32F4再探 1 時鐘系統

在算已經入門了stm32之後 其實也不算入門了,只是會使用stm32的各種外設,會gpio,會復用,能使用spi,串列埠,會輸出pwm,會定時器,剛剛實現乙個無線通訊控制步進電機按照一定流程運動,下一步打算移植ucosiii到板子中 在這之前覺著好像僅僅只是會使用stm32,能看得懂例程,但是對於一...

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...