文章
博客 网店

 STM32F105/107外部晶振换成8M


如果你恰巧使用STM32F105/107系列芯片,如果你恰巧不使用USB OTG或以太网外设,如果你又恰巧外部晶振焊上了8M的;
 好吧,你需要做一些改动才能正确的使用标准外设库:

STM32F105/107库函数默认使用的是25MHZ晶振,所以在system_stm32f10x.c中初始化时钟的代码为:

    /* 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);

    
如果使用的是8MHZ晶振,就应该这样配置了:

    /* PLL2 configuration: PLL2CLK = (HSE / 8) * 8= 8 MHz */
      /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 1 = 8 MHz */
                                                                  
      RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV8| RCC_CFGR2_PLL2MUL8 |
                    RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV1);


要注意的是上面的代码仅适用于系统时钟设置成72M时的情况;如果是其它频率请根据以上的原理自行修改!

这样改下来时钟配置似乎正确了,但还有一个问题是,标准库中要让获取总线时钟的函数得到正确的
 时钟频率值需要在stm32f10x.h文件中的HSE_VALUE从25M改为8M!

 #if !defined  HSE_VALUE
  #ifdef STM32F10X_CL   
   #define HSE_VALUE    ((uint32_t)8000000) /*此处将原来的25改为8 */
  #else 
   #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  #endif /* STM32F10X_CL */
 #endif /* HSE_VALUE */



芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved