关于#stm32#的问题,如何解决?急


```c

  Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers.
Sets System clock frequency to 72MHz and configure HCLK, PCLK2 
  *         and PCLK1 prescalers. 

static void SetSysClockTo72(void)
上面这个函数的哪里得到了stm32f103c8t6的外部时钟的PLL倍频(72MHz)

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在STM32F103C8T6芯片中,系统时钟由外部晶体振荡器提供,并通过PLL倍频器进行倍频后得到。那么如何在代码中设置PLL倍频并将系统时钟频率设置为72MHz呢?

可以通过以下步骤实现:

  1. 在代码中包含RCC库头文件。
#include "stm32f10x_rcc.h"已黑化的小白 ```

2. 设置外部晶体振荡器为系统时钟源,并启用PLL倍频器。

```c
// Enable HSE (external crystal oscillator)
RCC_HSEConfig(RCC_HSE_ON);

// Wait till HSE is ready
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);

// Configure PLL settings
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

// Enable PLL
RCC_PLLCmd(ENABLE);

// Wait till PLL is ready
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

// Set system clock dividers
RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK / 1
RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK / 1
RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK / 2

// Select PLL as system clock source
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

在上面的代码中,我们先启用外部晶体振荡器(HSE)并等待其就绪。然后配置PLL的设置,此处我们将外部时钟频率(HSE)除以1,再将其乘以9,以获得72MHz的系统时钟频率。接着启用PLL并等待其就绪,最后设置HCLK、PCLK2和PCLK1的分频器,以及将PLL选为系统时钟源。

希望能帮到你。
如果我的回答解决了您的问题,请采纳!

贴一下其他有关的代码,使用的标准库的代码?比如你的外部晶振多少,展示一下。根据你的描述来看:
为你找到了标准库代码的原型:


defined SYSCLK_FREQ_72MHz
/**
  * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 
  *        and PCLK1 prescalers. 
  * @param None.
  * @arg None.
  * @note : This function should be used only after reset.
  * @retval value: None.
  */
static void SetSysClockTo72(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /*!< SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    
  /*!< Enable HSE */    
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /*!< Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));

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

  if (HSEStatus == (uint32_t)0x01)
  {
    /*!< Enable Prefetch Buffer */
    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 */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /*!< PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
    /*!< PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
#if 0
    /*!< PLLCLK = 8MHz * 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 | RCC_CFGR_PLLMULL9);
#else 
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL9);
#endif
    /*!< Enable PLL */
    RCC->CR |= RCC_CR_PLLON;

    /*!< Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }

    /*!< Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    

    /*!< Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
    {
    }
  }
  else
  { /*!< If HSE fails to start-up, the application will have wrong clock 
         configuration. User can add here some code to deal with this error */    
    /* 使能HSE */
    RCC_HSEConfig(RCC_HSE_ON);  
    /* 使能HSE就绪中断 */
    RCC_ITConfig(RCC_IT_HSERDY, ENABLE);
  }
}

img


希望解答对你调试有所启发~~望采纳

以下内容部分参考ChatGPT模型:


这个函数中,设置了系统时钟频率为72MHz,这是通过PLL倍频设置实现的。具体来说,这个函数使用了RCC_PLLConfig函数来配置PLL时钟源、分频系数和倍频系数,使得PLL时钟输出为72MHz。然后根据系统时钟源的选择(HSE或HSI),再调用RCC_SYSCLKConfig函数设置系统时钟源和分频系数,从而得到最终的系统时钟频率。

下面是一个示例代码,展示如何使用RCC_PLLConfig和RCC_SYSCLKConfig函数来设置系统时钟频率为72MHz:

#include "stm32f10x.h"

static void SetSysClockTo72(void)
{
    RCC_DeInit();  // 复位RCC外设到默认状态

    RCC_HSEConfig(RCC_HSE_ON);  // 使能外部高速晶振

    // 等待外部高速晶振稳定
    if (RCC_WaitForHSEStartUp() == SUCCESS)
    {
        // 配置PLL时钟源、分频系数和倍频系数
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

        // 使能PLL
        RCC_PLLCmd(ENABLE);

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

        // 配置系统时钟源和分频系数
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK_Div1);

        // 配置AHB时钟、APB2时钟和APB1时钟的分频系数
        RCC_HCLKConfig(RCC_SYSCLK_Div1);
        RCC_PCLK2Config(RCC_HCLK_Div1);
        RCC_PCLK1Config(RCC_HCLK_Div2);

        // 更新系统时钟频率变量
        SystemCoreClockUpdate();
    }
}

如果我的建议对您有帮助、请点击采纳、祝您生活愉快