首页 > 其他 > 详细

系统时钟配置

时间:2019-03-14 10:29:04      阅读:269      评论:0      收藏:0      [点我收藏+]

一、修改晶振频率(STM32F1/4xx.h)

  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */

  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/

二、使用外部晶振作为系统时钟源

  1.STM32F4xx (system_stm32f4xx.c)

  RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);

  2.STM32F1xx(system_stm32f1xx.c) 

  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);

  修改这几个分/倍频系数。

三、配置内部时钟

  1.STM32F4xx(system_stm32f4xx.c)

  SetSysClock();--> RCC_Configuration(16,336,2,7);  (SYSCLK =  (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N/ PLL_P)

  void RCC_Configuration(uint32_t m, uint32_t n, uint32_t p, uint32_t q)
  {
    __IO uint32_t HSIStartUpStatus = 0;
    RCC_DeInit();
    RCC_HSICmd(ENABLE);
    HSIStartUpStatus = RCC->CR & RCC_CR_HSIRDY;
    if (HSIStartUpStatus == RCC_CR_HSIRDY) {
      RCC->APB1ENR |= RCC_APB1ENR_PWREN;
      PWR->CR |= PWR_CR_VOS;
      RCC_HCLKConfig(RCC_SYSCLK_Div1);
      RCC_PCLK2Config(RCC_HCLK_Div2);
      RCC_PCLK1Config(RCC_HCLK_Div4);
      RCC_PLLConfig(RCC_PLLSource_HSI, m, n, p, q);
      RCC_PLLCmd(ENABLE);
      while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
      }
      FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
      while (RCC_GetSYSCLKSource() != 0x08){
      }
    }
    else{
      while(1) {
      }
    }
  }

  2.STM32F1xx  

  //use HSI as system clock MAX freq = 64M HZ
  void RCC_Configuration()
  {
    RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
    RCC_HSICmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就绪
    RCC_HCLKConfig(RCC_SYSCLK_Div1); /*设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
    RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/
    RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
    FLASH_SetLatency(FLASH_Latency_2); /*设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期*/
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /*选择FLASH预取指缓存的模,预取指缓存使能*/
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);/*设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz*/
    RCC_PLLCmd(ENABLE); /*使能PLL */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*检查指定的RCC标志位(PLL准备好标志)设置与否*/
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK) */
    while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作为系统时钟 */
  }

 

系统时钟配置

原文:https://www.cnblogs.com/dogsuned/p/10528367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!