STM32系列修改外部晶振以及代码的修改
其他
2020-01-16 10:32:37
阅读次数: 0
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]
然后,还是使用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); 8M晶振 16M晶振2分频 再倍频*9=72 |
发布了112 篇原创文章 ·
获赞 120 ·
访问量 62万+
转载自blog.csdn.net/qq_36958104/article/details/103923365