STM32學習筆記 SystemInit 函式

2021-08-11 08:47:41 字數 1683 閱讀 5526

時鐘頻率

在stm32韌體庫3.0中對時鐘頻率的選擇進行了大大的簡化,原先的一大堆操作都在後台進行。系統給出的函式為systeminit()。但在呼叫前還需要進行一些巨集定義的設定,具體的設定在system_stm32f10x.c檔案中。

檔案開頭就有乙個這樣的定義:

//#define sysclk_freq_hse    hse_value 

//#define sysclk_freq_20mhz 20000000

//#define sysclk_freq_36mhz 36000000

//#define sysclk_freq_48mhz 48000000

//#define sysclk_freq_56mhz 56000000

#define sysclk_freq_72mhz 72000000

#define sysclk_freq_72mhz 72000000
也就是103系列能跑到的最大值72m

然後這個 c檔案繼續往下看

#elif defined sysclk_freq_72mhz 

const uint32_t systemfrequency = sysclk_freq_72mhz;

const uint32_t systemfrequency_sysclk = sysclk_freq_72mhz;

const uint32_t systemfrequency_ahbclk = sysclk_freq_72mhz;

const uint32_t systemfrequency_apb1clk = (sysclk_freq_72mhz/2);

const uint32_t systemfrequency_apb2clk = sysclk_freq_72mhz;

這就是在定義了cpu跑72m的時候,各個系統的速度了.他們分別是:硬體頻率,系統時鐘,ahb匯流排頻率,apb1匯流排頻率,apb2匯流排頻率.再往下看,看到這個了:

#elif defined sysclk_freq_72mhz 

static

void setsysclockto72(void);

這就是定義 72m 的時候,設定時鐘的函式.這個函式被 setsysclock ()函式呼叫,而

setsysclock ()函式則是被 systeminit()函式呼叫.最後 systeminit()函式,就是被你呼叫的了

所以設定系統時鐘的流程就是:

首先使用者程式呼叫 systeminit()函式,這是乙個庫函式,然後 systeminit()函式裡面,進行了一些暫存器必要的初始化後,就呼叫 setsysclock()函式. setsysclock()函式根據那個#define sysclk_freq_72mhz 72000000 的巨集定義,知道了要呼叫setsysclockto72()這個函式,於是,就一堆麻煩而複雜的設定~!@#$%^然後,cpu跑起來了,而且速度是 72m. 雖然說的有點累贅,但大家只需要知道,使用者要設定頻率,程式中就做的就兩個事情:

第乙個: `system_stm32f10x.c 中

#define sysclk_freq_72mhz 72000000
第二個:呼叫systeminit()

原子STM32學習筆記 system資料夾

初始化延遲函式 當使用ucos的時候,此函式會初始化ucos的時鐘節拍 systick的時鐘固定為hclk時鐘的1 8 sysclk 系統時鐘 void delay init 解釋 fac us systemcoreclock 8000000 外部晶振為8m,然後倍頻到72m,那麼sytetick為...

STM32學習筆記

剛到公司實習,要學習stm32開發,boss給了一塊戰艦開發板,讓我自己寫乙個功能要用在公司的產品上。難啊。以前根本沒接觸過stm32,只能一步一步慢慢來,利用晚上利用週末惡補一下。哎,算是為了大學前兩年還債吧。一 跑馬燈實驗 gpio輸出 實驗環境 keil4 實驗平台 戰艦stm32開發板 gp...

stm32學習筆記

開漏模式輸出 輸出暫存器上的 0 啟用 n mos,而輸出暫存器上的 1 將埠 置於高阻狀態 p mos從 被啟用 推挽模式輸出 輸出暫存器上的 0 啟用 n mos,而輸出暫存器上的 1 將啟用 p mos。上拉輸入 輸入高電平,然後接乙個 上拉電阻 保護作用 讀取此時的引腳電平為高電平 下拉輸入...