STM32 时钟

来源:互联网 发布:bec中级用书 知乎 编辑:程序博客网 时间:2024/05/06 22:28

                                                                        stm32时钟树基础讲解






先来说明两个概念

主干假设外部使用8M晶振作为stm32时钟输入源,则这个8M就是主干

分支 最终的外部设备,比如GPIO

我们来分析一条时钟脉络

3 - 5 -7 - 21- 8- 9 11- 13

3  首先外部8M晶振输入

5  PLL 选择位 作用为选择后续PLL分支的输入时钟(假设选择外部晶振)

7 设置外部时钟分频(假设1分频)

21 选择PLL倍频时钟,(假设选择分频后的外部时钟)

8 设置PLL倍频(假设设置9倍)

9 选择系统时钟源(假设选择经过PLL倍频过的时钟)

11 设置AHB分频(假设设置1分频)

13 时钟到达AHB总线

我们在来分析3 5 7 21 8 9 11 15 16

对于3首先是外部8M晶振输入

对于5 通过PLL选择位于选择后续PLL分支的输入时钟(假设选择外部晶振)

对于7设置外部晶振的分频数(假设1分频)

21选择倍频时钟源(假设选择经过分频后的外部时钟)

8 设置PLL倍频数,设置9倍频

9 选择系统时钟源(假设选择经过PLL倍频后的时钟)

11 设置AHB总线分频数(假设1分频)

15 设置APB2总线分频(假设1分频)

16 到达APB2总线


现在来分析一下程序

void  RCC_Configuration(void)

{

ErrorStatus HSEStaruUpStatus;                                                 1

        RCC_DeInit();                                                                             2

       RCC_HSEConfig(RCCC_HSE_ON);                             3

      HSEStaruUpStatus = RCC_WaitForHSEStartUp()    4

      if(HSEStaruUpStatus  == SUCCESS)

{

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div1);

    RCC_PCLK1Config(RCC_HCLK_Div2);

    FLASH_SetLatency(FLASH_Latency_2);

FLASH_PresetchBufferCmd(FLASH_PrefetchBuffer_Enable);

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

   RCC_PLLCmd(ENABLE);

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() != 0x08);

}

}


1 定义一个ErrorStatus类型的变量HSEStartUpStatus.

2 将时钟树复位致默认设置

3 开启HSE晶振

4 等待HSE稳定,并将起振结果保存到HSEStartUpStatus变量中

5 判断HSE晶振是否起振陈功,成功啦进入if内部

6







0 0
原创粉丝点击