• 自己的STM32F407各个时钟是多少?


    用stm32cube生成工程的时候,要配置各个时钟,之前一直沿用的模板例程,所以还真不知道各个时钟到底是多少。上图,这是要配置的,可是自己程序配置的是怎样呢?

    接下来,看程序,程序开始

    1 startup_stm32f40_41xxx.s 

     1 Reset_Handler    PROC
     2                  EXPORT  Reset_Handler             [WEAK]
     3         IMPORT  SystemInit
     4         IMPORT  __main
     5 
     6                  LDR     R0, =SystemInit
     7                  BLX     R0
     8                  LDR     R0, =__main
     9                  BX      R0
    10                  ENDP

    在进入main函数之前,系统调用了SystemInit函数.

    2 system_stm32f4xx.c

    在SystemInit里截取一段程序

    1   /* Configure the System clock source, PLL Multiplier and Divider factors, 
    2      AHB/APBx prescalers and Flash settings ----------------------------------*/
    3   SetSysClock();

    注释:配置系统时钟源,....

    进入SetSysClock();

     1 static void SetSysClock(void)
     2 {
     3    ....
     4   
     5     /* HCLK = SYSCLK / 1*/
     6     RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
     7 
     8 
     9    #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) ||     defined (STM32F429_439xx)      
    10     /* PCLK2 = HCLK / 2*
    11     RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
    12     
    13     /* PCLK1 = HCLK / 4*/
    14     RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
    15 #endif /* STM32F40_41xxx || STM32F427_437x || STM32F429_439xx */
    16    ....
    17        /* Configure the main PLL */
    18     RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
    19                    (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);
    20 
    21     /* Enable the main PLL */
    22     RCC->CR |= RCC_CR_PLLON;
    23 }

    可以知道HCLK = SYSCLK/1,PCLK2 = HCLK / 2,PCLK1 = HCLK / 4。接下来就和M,P,Q有关了

    这些值在前边有define,以我的工程为例

     1 ....
     2 #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)
     3 /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
     4 #define PLL_M      8
     5 #else /* STM32F411xE */
     6 ......
     7 /* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
     8 #define PLL_Q      7
     9 
    10 #if defined (STM32F40_41xxx)
    11 #define PLL_N      336
    12 /* SYSCLK = PLL_VCO / PLL_P */
    13 #define PLL_P      2
    14 #endif /* STM32F40_41xxx */
    15 ....

    至此就差一项还不知道了,就是外部晶振频率,它在stm32f4xx.h中有定义,

    #if !defined  (HSE_VALUE) 
      #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
      
    #endif /* HSE_VALUE */
    
    /**
     * @brief In the following line adjust the External High Speed oscillator (HSE) Startup 
       Timeout value 
       */
    #if !defined  (HSE_STARTUP_TIMEOUT) 
      #define HSE_STARTUP_TIMEOUT    ((uint16_t)0x05000)   /*!< Time out for HSE start up */
    #endif /* HSE_STARTUP_TIMEOUT */   
    
    #if !defined  (HSI_VALUE)   
      #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
    #endif /* HSI_VALUE */   

    综合这些,就可以刻第一幅图对应起来了。

    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    扫盲如何在ECLIPSE中使用条件断点
    春困
    气虚咳喘案
    知足老师论糖尿病
    辨痰之病位与寒热
    常用中药功效比较(任之堂)
    女子全身窜痛案
    小儿外感案
    紫斑案
    读任之堂中药讲记笔记
  • 原文地址:https://www.cnblogs.com/Rainingday/p/6698911.html
Copyright © 2020-2023  润新知