STM32F105库函数默认使用的是25MHZ晶振:
通过下面配置,最终得到系统时钟72MHZ:
/* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
/* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
如果使用的是其他的晶振怎么配置呢,下面以12M晶振为例
通过下面配置既可,最终得到系统时钟72MHZ:
/* PLL2 configuration: PLL2CLK = (HSE / 12) * 12= 12 MHz */
/* PREDIV1 configuration: PREDIV1CLK = PLL2 / 1 = 12 MHz */ RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV12| RCC_CFGR2_PLL2MUL12 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV1);
通过下面配置,最终得到系统时钟72MHZ:
/* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
/* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
如果使用的是其他的晶振怎么配置呢,下面以12M晶振为例
通过下面配置既可,最终得到系统时钟72MHZ:
/* PLL2 configuration: PLL2CLK = (HSE / 12) * 12= 12 MHz */
/* PREDIV1 configuration: PREDIV1CLK = PLL2 / 1 = 12 MHz */ RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV12| RCC_CFGR2_PLL2MUL12 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV1);
/* PLL configuration: PLLCLK = PREDIV1 * 6 = 72 MHz */
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_PLLMULL6);
下面是STM32F105的时钟树,对照不能理解STM32F105时钟为什么要这样配置