天天看點

STM32F1時鐘系統

1、

STM32F1時鐘系統

SYSCLK、AHB、APB1和APB2的時鐘頻率是在system_stm32f10x.c檔案中設定的。

#define SYSCLK_FREQ_72MHz 72000000

一、對于系統時鐘,預設情況下是在 SystemInit 函數的 SetSysClock()函數中間判斷的,而設定是通過宏定義設定的。我們可以看看 SetSysClock()函數體:

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

SetSysClockTo72();

#endif

}

二、同時還要注意的是,當我們設定好系統時鐘後,可以通過變量 SystemCoreClock 擷取系統時鐘值,如果系統是 72M 時鐘,那麼 SystemCoreClock=72000000。

#ifdef SYSCLK_FREQ_HSE

uint32_t SystemCoreClock = SYSCLK_FREQ_HSE;

#elif defined SYSCLK_FREQ_36MHz

uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz;

#elif defined SYSCLK_FREQ_48MHz

uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz;

#elif defined SYSCLK_FREQ_56MHz

uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz;

#elif defined SYSCLK_FREQ_72MHz

uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz;

#else

uint32_t SystemCoreClock = HSI_VALUE;

#endif

三、AHB、APB1和APB2的時鐘頻率是在SetSysClockTo72()函數中設定的

RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
           

四、最終通過IMPORT SystemInit LDR R0, =SystemInit兩條語句來運作。

繼續閱讀