STM32系列修改外部晶振以及代码的修改

STM32系列修改外部晶振以及代码的修改

借用原子哥的一句话

很多初学者,用库函数开发STM32的时候不知道如何修改系统主频?不知道如何修改外部晶振频率?
这里,我们针对这两个问题,给大家做一个简单的教程。希望大家能够掌握,以后可以轻松修改主频

 

 

8M晶振修改为12M  主频72M不变

STM32F1的固件库,外部晶振频率的定义在stm32f10x.h里面,如下:
[mw_shl_code=c,true]#if !defined HSE_VALUE
#ifdef STM32F10X_CL 
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else 
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */[/mw_shl_code]
其中,HSE_VALUE就是外部晶振的频率,对通用型STM32,默认是8M,对互联型,默认是25M。
如果我们使用12M外部晶振,那么修改HSE_VALUE 的值为:12000000,即可,代码如下:

[mw_shl_code=c,true]#if !defined HSE_VALUE
#ifdef STM32F10X_CL 
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else 
#define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */[/mw_shl_code]

 

 

STM32系列修改外部晶振以及代码的修改_第1张图片
然后,还是使用72M的主频,在system_stm32f10x.c里面,有如下宏定义:
#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

默认定义了:SYSCLK_FREQ_72MHz 72000000,也就是72M,所以这里不用改,但是,事实上,修改主频为72M的是通过
SetSysClockTo72函数实现的,该函数核心代码如下:
 RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 
                            RCC_CFGR_PLLMULL9); 
#else    
    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
#endif /* STM32F10X_CL */

    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;其中,修改主频的核心代码为:
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
通过RCC_CFGR_PLLMULL9将倍频系数设置为9,如果默认外部晶振是8M,那么刚好得到72M的频率。
不过,我们修改外部晶振为12M了,所以这里得改为6,修改后代码如下:
 RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);

STM32系列修改外部晶振以及代码的修改_第2张图片

8M晶振 

 

STM32系列修改外部晶振以及代码的修改_第3张图片

 

16M晶振2分频  再倍频*9=72

 

STM32系列修改外部晶振以及代码的修改_第4张图片

 

 

 

你可能感兴趣的:(单片机,stm32)