`
hzy3774
  • 浏览: 984922 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

STM32学习笔记之修改外部晶振频率

 
阅读更多

我们常用的STM32F10x系列单片机外部晶振频率默认指定成了8M,如果外部电路发生修改,外部晶振发生了变化,会导致系统主频变化,串口输出乱码。

外部晶振频率定义在库头文件:stm32f10x.h中:

/**
 * @brief In the following line adjust the value of External High Speed oscillator (HSE)
   used in your application 
   
   Tip: To avoid modifying this file each time you need to use different HSE, you
        can define the HSE value in your toolchain compiler preprocessor.
  */           
#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 */

 HSE_VALUE就是外部晶振的频率,我们可以看到代码中定义了两种频率:25M和8M,默认情况下使用的是8M。注释里说如果不想修改代码,也可以在编译宏定义中定义HSE的值。当然直接修改头文件也可以:

修改方法,比如要修改成12M:

1.修改stm32f10x.h

#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 */
	#define HSE_VALUE    ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
 #endif /* STM32F10X_CL */
#endif /* HSE_VALUE */

 2.为保证系统主频还是72M,还要改system_stm32f10x.c里的SetSysClockTo72()函数

 

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

 通过注释可以看到72M是通过HSE*9得到,现在HSE成了12,PLLNUM只需要6就可以到72M:

 

 /*  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);
		
		/*  PLL configuration: PLLCLK = HSE * 6 = 72 MHz */
		RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);

 重新编译运行,串口输出正常。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics