STM32之系統時鐘

作者:stm_小強
企鵝:759040024
說明:
庫文件版本:3.5.0
1. 3.5.0版本的庫文件將SystemInit函數放在了啓動文件裏
Reset handler爲復位異常,當發生異常時就會跳到相應的中斷向量表定義的函數去執行這裏也就是執行SystemInit標號代表的c函數
; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main               // 這裏應該是申明標號的吧?不是太清楚IMPORT 這個關鍵字
                IMPORT  SystemInit
                LDR     R0, =SystemInit   // 跳到SystemInit的連接地址去執行
                BLX     R0                           //帶返回的跳轉指令
                LDR     R0, =__main       //跳轉到main函數去執行
                BX      R0
                ENDP


2.SystemInit函數主要實現對系統時鐘的初始化,能滿足大多數開發的需求.會根據宏去調用相應的SetSysClock()函數
相關代碼:摘取自system_stm32f10x.c
void SystemInit (void)
{
。。。。
  SetSysClock();      //最重要的函數,根據定義的系統時鐘的宏對rcc相關寄存器初始化
。。。。
}
static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
  SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
  SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
  SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
  SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
  SetSysClockTo56();  
#elif defined SYSCLK_FREQ_72MHz   //設置爲sysclk=72M
  SetSysClockTo72();   //由於我們定義了SYSCLK_FREQ_72MHz這個宏所以這裏使用這個函數去初始化寄存器
//可以修改這個宏實現不同的時鐘頻率
#endif
}
3.分析SetSysClockTo72(),對照寄存器可以知道初始化完成後各時鐘爲
Sysclk=72Mhz
hclk=72Mhz
pclk1=36Mhz
pclk2=72Mhz
clkusb=48Mhz

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