怡春院2017,日韩av网页,717韩国三级理伦电影,欧美久草网,亚洲欧美日韩综合,一级特黄色片子

您現在的位置: 主頁 > 技術分享 > 硬件知識 > MCU & ARM

STM32F1XX時鐘系統

一,時鐘系統框圖
  

下面我們根據這張圖說說有關STM32時鐘系統的那些事
 
二,STM32的5個時鐘源:HSI HSE LSI LSE PLL
 1. HSI:高速內部時鐘
  由內部RC振蕩器產生,頻率不穩定,約8M
   
 
   可直接作為系統時鐘的選擇(如圖:系統時鐘源有4個來源選擇,后邊講解)
   可2分頻后經過選擇器做PLL時鐘源
 2. HSE:高速外部時鐘
  由外部時鐘源產生,可接4M-16MHz晶振
  
 
   可經過選擇器1,選擇器2做PLL時鐘源
   可2分頻后經過選擇器1,選擇器2做PLL時鐘源
   可直接作為系統時鐘的時鐘源
   可128分頻后做RTC時鐘源
 3. PLL:鎖相環
  作用:可關閉或倍頻2-16倍,共16種選擇(最大不能超過72MHz)
  
 
   倍頻后的PLLCLK可直接做系統時鐘源
   可經過USB預分頻器(分頻前48或72MHz)分頻后,做USB時鐘(48MHz)
   例如:HSE外接8M晶振通過選擇器1選擇器2進入PLL,可設置PLL的倍頻系數(通過配置相關寄存器配置)
   倍頻后產生的PLLCLK可作為系統時鐘的一個選擇
 4. LSE:低速外部時鐘
  由外部晶振產生,一般外接32.768MHz晶振給RTC(STM32芯片內部時鐘單元)時鐘提供時鐘源
  
 
   外接32.768KHz晶振為RTC時鐘提供時鐘源
 5. LSI:低速內部時鐘
  由內部RC振蕩器產生,頻率不穩定 約40KHz
  
 
   為STM32獨立看門狗單元提供時鐘來源
   也可為RTC提供時鐘來源(RTC有3個可選時鐘源)
   由于RTC實時時鐘對時鐘的要求較高,所以一般不使用LSI作為時鐘源,采用LSE外接32.768KHz晶振作為RTC時鐘源
三,STM32的八個時鐘
  
 
 1. 系統時鐘-SYSCLK
  
  系統時鐘的來源:
   1,HSI直接做系統時鐘源
   2,HSE直接做系統時鐘源
   3,PLL倍頻后的PLLCLK做系統時鐘源(這里的PLL時鐘來源有3種,一會兒說)
   4,CSS單元(時鐘監控系統)
   CSS作用是監聽系統時鐘是否出了問題(間接知道外部晶振是否壞了)
   項目中大多系統時鐘來源采用HSE,一旦監控到HSE失敗,會自動切換系統時鐘源為HSI
 2. PLL時鐘-PLLCLK
  
 
  PLL的時鐘來源:
   1,HSI的2分頻
   2,HSE->選擇器1->選擇器2
   3,HSE的2分頻->經過選擇器1->選擇器2
 3. RTC時鐘-RTCCLK:32.768MHz
  
 
  RTC時鐘來源:
   1,HSE的128分頻
   2,LSE外接32.768kHz晶振
   3,LSI直接做RTC時鐘源
   由于LSI是由內部RC振蕩器產生,不穩定,RTC時鐘對時鐘源的要求較高,多以一般用LSE外接32.768MHz晶振做RTC時鐘源
 
 4,獨立看門狗時鐘-IWDGCLK:40MHz
  
 
  獨立看門狗時鐘來源:
   由LSI直接作為其時鐘源
 5. AHB總線時鐘-HCLK:速度最高72MHz
  AHB預分頻器,9種分頻因子為:1,2,4,8,16,64,128,256,512
  
 
  系統時鐘HCLK 經過AHB預分頻器,產生HCLK時鐘(最高72M)
  一般將系統時鐘設置為72M將AHB預分頻器設置為1
  AHB總線下還掛載了ABP1預分頻器和APB2預分頻器(后邊說)
 6. APB1總線時鐘-PCLK1(低速):速度最高36MHz
  APB1預分頻器:分頻因子:1,2,4,8,16
  
 
  AHB時鐘HCLK經過APB1預分頻器,產生PCLK1時鐘(最高到36M)-低速外設總線時鐘
  下面掛一些低速外設,如:通用定時器時鐘
  APB1總線下掛載的部分這里不做講解(到定時器時再說)
 7. APB2總線時鐘-PCLK2(高速):速度最高72MHz
  APB2預分頻器-5種分頻因子為:1,2,4,8,16
  
 
  AHB時鐘HCLK經過APB2預分頻器,產生PCLK2時鐘(最高到72M)-高速外設總線時鐘
  下面掛一些高速外設,如:TIM1時鐘,ADC時鐘
  APB2總線下掛載的部分這里不做講解(到定時器和ADC時再說)
 8. USB時鐘-USBCLK:48MHz
  
 
  來自PLLCLK經過USB分頻器(可通過相關寄存器配置 1倍 1.5倍)
   F1芯片在不超頻時的最大時鐘是72MHz,也就是說:
   當PLLCLK為72MHz系統時鐘時,USB分頻器為1.5倍,72/1.5=48MHz
   當PLLCLK為48MHz時,USB分頻器為1倍,48/1=48MHz
所以:使用外設前需要使能相應的鐘使能位,否則外設不能使用
STM32有很多外設,不使用的不打開,否則增加功耗(耗電)
四,MCO:輸出內部時鐘的引腳
 MCO:輸出內部時鐘的引腳(PA8),可輸出相關內部時鐘
  
 
 MCO輸出內部時鐘的選擇:
  SYSCLK-系統時鐘
  HSI-高速內部時鐘
  HSE-高速外部時鐘
  PLLCLK的2分頻
五,時鐘系統寄存器
 與時鐘相關的配置寄存器一般在:stm32f10x_rcc.c下stm32f10x_rcc.h頭文件中
 stm32f10x_rcc.c下stm32f10x.h中包含了大多數的地址映射,可找到RCC結構體
        /** 
          * @brief Reset and Clock Control
          */
        typedef struct
        {
          __IO uint32_t CR;           // HSI,HSE,CSS,PLL等的使能和就緒標志位 
          __IO uint32_t CFGR;         // PLL等的時鐘源選擇,分頻系數設定
          __IO uint32_t CIR;          // 清除/使能 時鐘就緒中斷
          __IO uint32_t APB2RSTR;     // APB2線上外設復位寄存器
          __IO uint32_t APB1RSTR;     // APB1線上外設復位寄存器
          __IO uint32_t AHBENR;       // DMA,SDIO等時鐘使能
          __IO uint32_t APB2ENR;      // APB2線上外設時鐘使能
          __IO uint32_t APB1ENR;      // APB1線上外設時鐘使能
          __IO uint32_t BDCR;         // 備份域控制寄存器
          __IO uint32_t CSR;          // 控制狀態寄存器
 
        #ifdef STM32F10X_CL  
          __IO uint32_t AHBRSTR;
          __IO uint32_t CFGR2;
        #endif /* STM32F10X_CL */ 
 
        #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)   
          uint32_t RESERVED0;
          __IO uint32_t CFGR2;
        #endif /* STM32F10X_LD_VL || STM32F10X_MD_VL || STM32F10X_HD_VL */ 
        } RCC_TypeDef;
 
 其中常用的五個寄存器:
          __IO uint32_t CR;           // HSI,HSE,CSS,PLL等的使能和就緒標志位 
          __IO uint32_t CFGR;         // PLL等的時鐘源選擇,分頻系數設定
          __IO uint32_t AHBENR;       // DMA,SDIO等時鐘使能
          __IO uint32_t APB2ENR;      // APB2線上外設時鐘使能
          __IO uint32_t APB1ENR;      // APB1線上外設時鐘使能
 
后三個寄存器:
 外設時鐘使能寄存器-控制AHB,APB1,APB2 
 例如: 
  AHB控制SDIO時鐘,CRC時鐘使能 
  APB1控制IO口時鐘使能 
  APB1控制串口使能,I2 
 
版權聲明:「BraveWangDev」https://blog.csdn.net/ABAP_Brave/article/details/52290784
?