RCC学习笔记—讲解系统时钟配置函数SetSysClockTo72()

static void SetSysClockTo72(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    
  /* 使能 HSE ,8M*/    
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /* 等待HSE就绪并做超时处理 */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;  //等待ready位
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }  

  // 如果HSE启动成功,程序则继续往下执行
  if (HSEStatus == (uint32_t)0x01)
  {
    /* 使能预取指 */
    FLASH->ACR |= FLASH_ACR_PRFTBE;

    /* Flash 2 wait state   两个等待周期*/
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    

 
    /* HCLK = SYSCLK = 72M */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK2 = HCLK = 72M */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
    /* PCLK1 = HCLK = 36M 二分频*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
    
    /*  锁相环配置: 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 */
    RCC->CR |= RCC_CR_PLLON;

    /* 等待PLL稳定  ready位 */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }    
    /* 选择PLLCLK作为系统时钟*/
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    

    /* 等待PLLCLK切换为系统时钟 */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
    {
    }
  }
  else
  { /* 如果HSE 启动失败,用户可以在这里自行添加处理错误的代码 */
  }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我提供以下步骤来配置STM32F103系统时钟为外部时钟源72M: 1. 首先,需要设置系统时钟源为外部时钟源。可以通过RCC函数库中的RCC_SYSCLKConfig()函数实现。具体代码如下: RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); //将HSE作为系统时钟源 2. 然后,需要配置外部时钟源HSE。如果您使用的是标准的STM32F103开发板,可能已经有一个外部时钟源(如晶体振荡器)连接到了MCU的时钟输入引脚。您需要在代码中使能这个外部时钟源,可以通过RCC函数库中的RCC_HSEConfig()函数实现。例如,如果您使用的是晶体振荡器,可以使用以下代码使能它: RCC_HSEConfig(RCC_HSE_ON); //使能HSE while (RCC_WaitForHSEStartUp() == ERROR); //等待HSE稳定 3. 接着,需要配置PLL。PLL是一种将输入时钟倍频的电路,可以将外部时钟源的频率提高到MCU需要的频率。您可以使用以下代码将外部时钟配置为PLL输入时钟RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL输入时钟为HSE/1,倍频系数为9 RCC_PLLCmd(ENABLE); //使能PLL while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL稳定 注意,这里的倍频系数需要根据您需要的系统时钟频率进行调整。例如,如果您需要72MHz的系统时钟频率,那么PLL输出时钟频率为外部时钟源频率乘以倍频系数,即8MHz*9=72MHz。 4. 最后,需要将PLL输出时钟作为系统时钟源。您可以使用以下代码将PLL输出时钟作为系统时钟源: RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将PLL输出时钟作为系统时钟源 while (RCC_GetSYSCLKSource() != 0x08); //等待系统时钟源切换完成 这样,您就成功将STM32F103系统时钟配置为外部时钟源72M了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值