STM32中 我需要RCC_MCOConfig()库,输出一个2M的时钟,我该怎么配置HSI HSE PLL呢?

2019-10-15 00:58发布

void RCC_Configuration(void)
{
  u32 StartUpCounter = 0, HSEStatus = 0;

  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/   
  /* Enable HSE */   
  RCC->CR |= ((u32)RCC_CR_HSEON);
//  /* Enable HSI */       
//  RCC->CR |= ((u32)RCC_CR_HSION);
//       
//        while(!(RCC->CR>>1));//等待HSI就绪
       
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

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

  if (HSEStatus == (u32)0x01)
  {
    /* HCLK = SYSCLK 设置高速总线时钟=系统时钟*/
    RCC->CFGR |= (u32)RCC_CFGR_HPRE_DIV1;

    /* PCLK2 = HCLK 设置低速总线2时钟=高速总线时钟 */
    RCC->CFGR |= (u32)RCC_CFGR_PPRE2_DIV1;

    /* PCLK1 = HCLK 设置低速总线1的时钟=高速时钟的二分频*/
    RCC->CFGR |= (u32)RCC_CFGR_PPRE1_DIV2;

    RCC->CFGR &= (u32)((u32)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (u32)(RCC_CFGR_PLLSRC_HSE  |RCC_CFGR_PLLXTPRE_HSE_Div2| RCC_CFGR_PLLMULL8);                //96MHz  RCC_CFGR_PLLXTPRE_HSE_Div2
               
    /* 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 &= (u32)((u32)~(RCC_CFGR_SW));
    RCC->CFGR |= (u32)RCC_CFGR_SW_PLL;   

    /* Wait till PLL is used as system clock source   等待校验成功*/
    while ((RCC->CFGR & (u32)RCC_CFGR_SWS) != (u32)0x08)
    {
    }               
  }
       
        Set_USBClock();
       
        /* DMA clock enable */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

        /* Enable  GPIOA, GPIOB, GPIOC, USART1, SPI1,AFIO clocks */
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
                                                                                                        RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_SPI1 , ENABLE);
                                                  
        /* Enable TIM2, TIM5 clock, PWR and BKP, USB clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM5 | RCC_APB1Periph_PWR | RCC_APB1Periph_BKP | RCC_APB1Periph_USB | RCC_APB1Periph_SPI2, ENABLE);
}
外部晶振是24M,求大神解决

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。