zoukankan      html  css  js  c++  java
  • stm32f7 时钟

      

    在 STM32F7 中,有 5 个最重要的时钟源,为 HSI、HSE、LSI、LSE、PLL。

    ①、LSI 是低速内部时钟,RC 振荡器,频率为 32kHz 左右。LSI 主要可以作为 IWDG 独立看门狗时钟,LPTimer 低功耗定时器时钟以及 RTC 时钟。

    ②、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。 

    ③、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~26MHz。阿波罗 STM32F7 开发板接的是 25MHz 外部晶振。HSE 可以直接做为系统时钟或者 PLL 输入时钟,同时它经过 2~31 分频后也可以作为 RTC 时钟。 

    ④、HSI 是高速内部时钟,RC 振荡器,频率为 16MHz。可以直接作为系统时钟或者用作 PLL输入,同时它经过 488 分频之后也可以作为 HDMI-CEC 时钟。 

    ⑤、PLL 为锁相环倍频输出。STM32F7 有三个 PLL:
    1) 主 PLL(PLL)由 HSE 或者 HSI 提供时钟信号,并具有两个不同的输出时钟。
      第一个输出 PLLP 用于生成高速的系统时钟(最高 216MHz)
      第二个输出 PLLQ 为 48M 时钟,用于 USB OTG FS 时钟,随机数发生器的时钟和 SDMMC
      时钟。
    2) 第一个专用 PLL(PLLI2S)用于生成精确时钟,在 I2S、SAI 和 SPDIFRX 上实现高品质音频性
    能。其中,N 是用于 PLLI2S vco 的倍频系数,其取值范围是:50~432;R 是 I2S 时钟的
    分频系数,其取值范围是:2~7;Q 是 SAI 时钟分频系数,其取值范围是:2~15;P 没
    用到。
    3) 第二个专用 PLL(PLLSAI)用于为 SAI接口生成时钟,生成 LCD-TFT时钟以及可供 USB OTG FS、
    SDMMC 和 RNG 选择的 48MHz 时钟。其中,N 是用于 PLLSAI vco 的倍频系数,其取值
    范围是:50~432;Q 是 SAI 时钟分频系数,其取值范围是:2~15;R 是 LTDC 时钟的分
    频系数,其取值范围是:2~7;P 没用到。

    时钟系统配置一般步骤:

    1、使能PWR时钟:调用函数__HAL_RCC_PWR_CLK_ENABLE()。

    2、设置调压器输出电压级别:调用函数__HAL_PWR_VOLTAGESCALING_CONFIG()。

    3、选择是否开启Over-Driver功能:调用函数HAL_PWREx_EnableOverDrive()。

    4、配置时钟源相关参数:调用函数HAL_RCC_OscConfig()。

    5、配置系统时钟源以及AHB,APB1和APB2的分频系数:调用函数HAL_RCC_ClockConfig()。


    时钟源配置函数:

    HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)

     他的参数:

    typedef struct
    {
      uint32_t OscillatorType;       /*!< The oscillators to be configured.
                                          This parameter can be a value of @ref RCC_Oscillator_Type                   */
    
      uint32_t HSEState;             /*!< The new state of the HSE.
                                          This parameter can be a value of @ref RCC_HSE_Config                        */
    
      uint32_t LSEState;             /*!< The new state of the LSE.
                                          This parameter can be a value of @ref RCC_LSE_Config                        */
                                              
      uint32_t HSIState;             /*!< The new state of the HSI.
                                          This parameter can be a value of @ref RCC_HSI_Config                        */
    
      uint32_t HSICalibrationValue;   /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).
                                           This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */
                                   
      uint32_t LSIState;             /*!< The new state of the LSI.
                                          This parameter can be a value of @ref RCC_LSI_Config                        */
    
      RCC_PLLInitTypeDef PLL;        /*!< PLL structure parameters                                                    */      
    
    }RCC_OscInitTypeDef;

    最后一个成员

     RCC_PLLInitTypeDef PLL  的结构体如下:
    typedef struct
    {
      uint32_t PLLState;   /*!< The new state of the PLL.
                                This parameter can be a value of @ref RCC_PLL_Config                      */
    
      uint32_t PLLSource;  /*!< RCC_PLLSource: PLL entry clock source.
                                This parameter must be a value of @ref RCC_PLL_Clock_Source               */           
    
      uint32_t PLLM;       /*!< PLLM: Division factor for PLL VCO input clock.
                                This parameter must be a number between Min_Data = 2 and Max_Data = 63    */        
    
      uint32_t PLLN;       /*!< PLLN: Multiplication factor for PLL VCO output clock.
                                This parameter must be a number between Min_Data = 50 and Max_Data = 432  */
    
      uint32_t PLLP;       /*!< PLLP: Division factor for main system clock (SYSCLK).
                                This parameter must be a value of @ref RCC_PLLP_Clock_Divider             */
    
      uint32_t PLLQ;       /*!< PLLQ: Division factor for OTG FS, SDMMC and RNG clocks.
                                This parameter must be a number between Min_Data = 2 and Max_Data = 15    */
    #if defined (STM32F765xx) || defined (STM32F767xx) || defined (STM32F769xx) || defined (STM32F777xx) || defined (STM32F779xx)
      uint32_t PLLR;       /*!< PLLR: Division factor for DSI clock.
                                This parameter must be a number between Min_Data = 2 and Max_Data = 7    */
    #endif /* STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx */  
    
    }RCC_PLLInitTypeDef;   

    HAL_RCC_OscConfig配置示例代码:(plln pllq 等都是变量,本例中是作为时钟init函数的入口参数

     RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;  //时钟源为HSE
     RCC_OscInitStructure.HSEState=RCC_HSE_ON;                      //打开HSE
     RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;    //打开PLL
     RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE; //PLL时钟源选择HSE
     RCC_OscInitStructure.PLL.PLLM=pllm;//主PLL和音频PLL分频系数(PLL之前的分频)
     RCC_OscInitStructure.PLL.PLLN=plln; //主PLL倍频系数(PLL倍频)
     RCC_OscInitStructure.PLL.PLLP=pllp; //系统时钟的主PLL分频系数(PLL之后的分频)
     RCC_OscInitStructure.PLL.PLLQ=pllq; //USB/SDIO/随机数产生器等的主PLL分频系数         
     HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化

    时钟配置函数:

    HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)

    入口参数结构体:

    typedef struct
    {
      uint32_t ClockType;             /*!< The clock to be configured.
                                           This parameter can be a value of @ref RCC_System_Clock_Type */
      
      uint32_t SYSCLKSource;          /*!< The clock source (SYSCLKS) used as system clock.
                                           This parameter can be a value of @ref RCC_System_Clock_Source    */
    
      uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).
                                           This parameter can be a value of @ref RCC_AHB_Clock_Source       */
    
      uint32_t APB1CLKDivider;        /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).
                                           This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */
    
      uint32_t APB2CLKDivider;        /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).
                                           This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */
    
    }RCC_ClkInitTypeDef;

    配置示例:

        RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
        RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;//设置系统时钟时钟源为PLL
        RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1;//AHB分频系数为1
        RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV4;//APB1分频系数为4
        RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV2;//APB2分频系数为2

  • 相关阅读:
    zabbix server监控本机agent
    虚拟机添加配置双网卡linux
    linux改变默认运行级别
    linux重置root密码
    vi文本编辑器
    centos7 mysql安装和基本操作yum安装
    安装wordpress个人网站
    httpd安装与配置(centos7) 2
    httpd安装与配置(centos7)
    Mac升级Python3
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12051526.html
Copyright © 2011-2022 走看看