1. 程式人生 > >STM32F1一種相對簡單的使用HSI配置系統時鐘為64MHz的方法

STM32F1一種相對簡單的使用HSI配置系統時鐘為64MHz的方法

    最近因為專案成本需要,必須使用片內晶振作為系統的時鐘源,所以對正點原子的專案模板時鐘配置做了一些修改。使時鐘倍頻至64MHz供系統使用。

    有需要的同學可以參考一下,程式碼如下:

#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

這裡先將巨集定義註釋掉;

#ifdef SYSCLK_FREQ_HSE
  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */
#else /*!< HSI Selected as System Clock source */
  //uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */
  uint32_t SystemCoreClock         = 64000000;			
#endif

接著將SystemCoreClock替換為64MHz;

/*使用內部RC振盪器,設定系統時鐘為64MHz*/
static void Intn_RC_Init(void)
{
    RCC_DeInit();
    RCC_HSICmd(ENABLE); 
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);
    RCC_HCLKConfig(RCC_SYSCLK_Div1);                         //設定AHB時鐘(HCLK) = 系統時鐘
    RCC_PCLK2Config(RCC_HCLK_Div1);                          //設定AHB2時鐘 = HCLK
    RCC_PCLK1Config(RCC_HCLK_Div1);                          //設定AHB1時鐘 = HCLK
    FLASH_SetLatency(FLASH_Latency_2);                       //設定FLASH儲存器延時時鐘週期數
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);    //設定PLL時鐘源及倍頻係數,頻率為8/2*16=64MHz
    RCC_PLLCmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    while(RCC_GetSYSCLKSource() != 0x08);
}

這樣就完成了系統時鐘的配置!