我是靠谱客的博主 任性香氛,最近开发中收集的这篇文章主要介绍stm32f1更换晶振后程序的变动,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先查看晶振的规格,若为8Mhz,则在stm32f10x.h的第119行与第130行将值改为8000000,
对应位置代码如下

#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)6000000) /*!< Value of the External oscillator in Hz */  /******************将6000000改为8000000*****************************/
 #endif /* STM32F10X_CL */
#endif /* HSE_VALUE */


/**
 * @brief In the following line adjust the External High Speed oscillator (HSE) Startup 
   Timeout value 
   */
#define HSE_STARTUP_TIMEOUT   ((uint16_t)0x0500) /*!< Time out for HSE start up */

#define HSI_VALUE    ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/    /*********************将6000000改为8000000************************/

/**
 * @brief STM32F10x Standard Peripheral Library version number

之后将下方代码放到main.c中,并视情况修改倍频数

void RCC_Configuration(void)
{    
    ErrorStatus HSEStartUpStatus;
      /* 复位系统时钟设置*/
      RCC_DeInit();

      /* 开启HSE*/                                                                                                                           
      RCC_HSEConfig(RCC_HSE_ON);

      /* 等待HSE起震并稳定*/
      HSEStartUpStatus = RCC_WaitForHSEStartUp();
    
    /* HSE是否起振成功 */
      if(HSEStartUpStatus == SUCCESS)
      {
        /* HCLK(AHB)时钟源为SYSCLK 1分频*/
        RCC_HCLKConfig(RCC_SYSCLK_Div1); 
  
        /* PCLK2时钟源为HCLK(AHB) 1分频 */
        RCC_PCLK2Config(RCC_HCLK_Div1); 

        /* PCLK1时钟源为HCLK(AHB) 2分频 */
        RCC_PCLK1Config(RCC_HCLK_Div2);

        /* 设置FLASH延时周期为2 */
        FLASH_SetLatency(FLASH_Latency_2);
        /* 使能FLASH预取缓存 */
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则输出频率为72MHz */
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );         

/***********采用8MHZ晶振,若要达到输出72MHZ,就需要9倍频*******/
/***********若采用6MHZ晶振,若要达到输出72MHZ,就需要12倍频*******/


        RCC_PLLCmd(ENABLE);      /* 使能 PLL */ 

        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);        /* 等待 PLL 输出稳定 */

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //选择SYSCLK的时钟源为PLL

        while(RCC_GetSYSCLKSource() != 0x08)
        {}
      }
     
}  

最后

以上就是任性香氛为你收集整理的stm32f1更换晶振后程序的变动的全部内容,希望文章能够帮你解决stm32f1更换晶振后程序的变动所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部