STM32设置时钟

  • Post author:
  • Post category:其他


参考资料:

http://bbs.ednchina.com/BLOG_ARTICLE_3011869.HTM

http://bbs.21ic.com/icview-587714-1-1.html


首先在主程序中注释掉SystemInit();
然后使用下面的函数做为系统时钟的初始化函数



  1. void


    RCC_Configuration(


    void


    )


  2. {

  3. RCC_DeInit();

    //将外设 RCC寄存器重设为缺省值





  4. RCC_HSICmd(ENABLE);

    //使能HSI





  5. while


    (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);


    //等待HSI使能成功






  6. //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);





  7. //FLASH_SetLatency(FLASH_Latency_2);





  8. RCC_HCLKConfig(RCC_SYSCLK_Div1);

  9. RCC_PCLK1Config(RCC_HCLK_Div2);

  10. RCC_PCLK2Config(RCC_HCLK_Div1);



  11. //设置 PLL 时钟源及倍频系数




  12. RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);

    //使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE




  13. RCC_PLLCmd(ENABLE);

    //如果PLL被用于系统时钟,那么它不能被失能





  14. //等待指定的 RCC 标志位设置成功 等待PLL初始化成功





  15. while


    (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);




  16. //设置系统时钟(SYSCLK) 设置PLL为系统时钟源




  17. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    //选择想要的系统时钟





  18. //等待PLL成功用作于系统时钟的时钟源





  19. //  0x00:HSI 作为系统时钟





  20. //  0x04:HSE作为系统时钟





  21. //  0x08:PLL作为系统时钟





  22. while


    (RCC_GetSYSCLKSource() != 0x08);


    //需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL






  23. }

补充一点:

由图可以看出系统时钟的供给可以有3种方式,HSI,HSE,PLL。如果选用内部时钟作为系统时钟,其倍频达不到72Mhz,最多也就8Mhz/2*16 = 64Mhz。