STM32使用庫函數設置系統時鐘頻率

參考原子哥的教程 http://www.openedv.com/forum.php?mod=viewthread&tid=95570&extra=page=1,原子哥排版比較亂,

 

這裏自己記錄一下,以STM32F103爲例:

庫函數的默認的系統時鐘流程是這樣的:

首先從彙編啓動文件中調用C語言函數:void SystemInit (void)

這個函數會設置一些【PLL啓動、允許使用外部晶振】等功能寄存器,然後會根據你定義的宏(默認定義宏爲SYSCLK_FREQ_72MHz),調用相應的函數來設置時鐘。

static void SetSysClockTo72(void)函數做的事情主要有2個:

(1) 檢測外部晶振是否正常,若超時仍未檢測到外部晶振,則程序的時鐘整個全出錯,見下圖

(2)更設置PLL倍頻係數,其實就是設置一下,設置多少倍才能把外部晶振倍頻到72M,如果我們的外部晶振是12M,那麼就把倍頻係數設置爲6,如果外部晶振爲8M,那就把倍頻係數設置爲9,以此類推,這個值需要手動修改:

 

還有一個點要注意,如果我們使用了外部晶振,代碼中必須要知道它的頻率(因爲庫函數中有些代碼需要根據這個值及其衍生值,來自動計算一些頻率相關的功能,如串口的波特率),這個頻率只能由程序員靠宏定義來告訴編譯器,宏的名字叫:HSE_VALUE,請按照真正的頻率來設置該宏,如下圖所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章