STM32F1一種相對簡單的使用HSI配置系統時鐘為64MHz的方法
阿新 • • 發佈:2019-02-07
最近因為專案成本需要,必須使用片內晶振作為系統的時鐘源,所以對正點原子的專案模板時鐘配置做了一些修改。使時鐘倍頻至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); }
這樣就完成了系統時鐘的配置!