STM32F105/107外部晶振换成8M
来源: 芯艺工作室
本站广告
  ENC28J60+uIP 基于TCP的MODBUS IO示例
  ENC28J60+uIP DHCP动态获取IP及UDP广播服务端示例
  ENC28J60+uIP HTTP GET方式将温度数据上传到web服务器
  C720H5上实现MODBUS远程IO
  FM1702读写S50(也叫M1)卡相关资料

如果你恰巧使用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 */





声明:芯艺工作室(http://www.chipart.cn)保留所有权力,转载请注明出处!

芯艺工作室    蒙ICP备06005492号

Copyright© 2004-2020 ChipArt Studio All Rights Reserved