본문 바로가기

[ST_MICRO]/STM32F1

STM32 내부클럭 사용하기

STM32 내부클럭 사용하기

보드 단가를 낮추기 위해서는 내부 오실레이터를 이용하면 좋은데 특히 STM32F100 시리즈는 저렴하기 때문에 보드 단가 측면에서 내부 오실레이터를 사용하는것이 유리하다. 


다만 디폴트가 PLL클럭의 1/2이다.

따라서 최대 64Mhz로 구동 하므로 주의가 필요 하다. (외부 8Mhz 구동시 최대 72Mhz로 구동가능하다.)

    PLLCLK = 8MHz/2 * 16 = 64 MHz 





/* PLL entry clock source */

#define RCC_PLLSource_HSI_Div2           ((u32)0x00000000)

#define RCC_PLLSource_HSE_Div1           ((u32)0x00010000)

#define RCC_PLLSource_HSE_Div2           ((u32)0x00030000)



void RCC_Configuration(void)

{

  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   

     

  /* RCC system reset(for debug purpose) */

  RCC_DeInit();


  /* Disanable HSE */

  RCC_HSEConfig(RCC_HSE_Bypass);


  /* Wait till HSE is ready */

  HSEStartUpStatus = RCC_WaitForHSEStartUp();


  //if(HSEStartUpStatus == SUCCESS)

  {

    /* Enable Prefetch Buffer */

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);


    /* Flash 2 wait state */

    FLASH_SetLatency(FLASH_Latency_2);

 

    /* HCLK = SYSCLK */

    RCC_HCLKConfig(RCC_SYSCLK_Div1); 

  

    /* PCLK2 = HCLK */

    RCC_PCLK2Config(RCC_HCLK_Div1); 


    /* PCLK1 = HCLK/2 */

    RCC_PCLK1Config(RCC_HCLK_Div2);


    /* On STICE the PLL output clock is fixed to 72 MHz */

//    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);    //64 Mhz


    /* Enable PLL */ 

    RCC_PLLCmd(ENABLE);


    /* Wait till PLL is ready */

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

    {

    }


    /* Select PLL as system clock source */

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


    /* Wait till PLL is used as system clock source */

    while(RCC_GetSYSCLKSource() != 0x08)

    {

    }


  }

}






반응형