詳解STM32時鐘

一、時鐘系統概述

時鐘是嵌入式系統中最重要的部分之一。在STM32中,時鐘系統可以分為系統時鐘、時鐘樹、PLL鎖相環以及分頻器這幾個部分。

系統時鐘負責提供基準時鐘信號,它主要由內部低速晶振LSE、高速晶振HSE以及相應的系統時鐘控制器RCC組成。時鐘樹負責將基準時鐘信號通過各種分頻、選擇電路最終形成各個模塊需要的時鐘信號。

PLL鎖相環可以通過內部晶振或者外部信號時鐘得到高頻時鐘信號,從而提高系統運行速度。分頻器則用於將時鐘信號分頻,提供給各個模塊使用。

二、系統時鐘控制器

在使用STM32時鐘系統前,需要先了解系統時鐘控制器RCC(Reset and Clock Control)的工作方式。RCC位於處理器外設區,主要功能是控制時鐘源的選擇和各個模塊的時鐘使能狀態。

STM32設備的時鐘源可以選擇為內部低速晶振LSE或高速晶振HSE,也可以通過PLL鎖相環或外部信號時鐘得到高頻時鐘信號。在進行系統時鐘切換時,需要先設置RCC的時鐘源。然後通過PLL鎖相環或分頻器將時鐘信號分配到各個模塊,這樣每個模塊都可以根據自己的需要選擇相應的時鐘。

三、時鐘樹

時鐘樹主要負責根據RCC的配置計算各個模塊的時鐘。在STM32中,可以通過配置RCC_CR、RCC_PLLCFGR等寄存器來控制時鐘分頻、倍頻、時鐘源選擇等參數。

/* Configure clock frequency to 180 MHz */
RCC->CR |= RCC_CR_HSION;  // Enable HSI internal oscillator
while(!(RCC->CR & RCC_CR_HSIRDY)); // Wait for HSI ready flag

RCC->CFGR |= RCC_CFGR_SW_HSI; // Select HSI as system clock
while(!(RCC->CFGR & RCC_CFGR_SWS_HSI)); // Wait for HSI selected as system clock

RCC->CFGR |= RCC_CFGR_PLLSRC_HSI_DIV2; // PLL input clock = HSI/2
RCC->CFGR |= RCC_CFGR_PLLM_DIV2;   // PLLM = 2
RCC->CFGR |= RCC_CFGR_PLLN_MUL180; // PLLN = 180
RCC->CFGR |= RCC_CFGR_PLLP_DIV2;   // PLLP = 2
RCC->CFGR |= RCC_CFGR_PLLQ_DIV5;   // PLLQ = 5

RCC->CR |= RCC_CR_PLLON; // Enable PLL
while(!(RCC->CR & RCC_CR_PLLRDY)); // Wait for PLL ready flag

RCC->CFGR |= RCC_CFGR_SW_PLL; // Select PLL as system clock
while(!(RCC->CFGR & RCC_CFGR_SWS_PLL)); // Wait for PLL selected as system clock

四、PLL鎖相環

PLL鎖相環是提高STM32系統性能的重要部分,它可以通過倍頻輸入信號來產生高頻時鐘信號。STM32中的PLL由一個VCO(Voltage Controlled Oscillator)和一個反饋電路組成,其輸出時鐘頻率可以通過改變倍頻器的時鐘倍率來調整。

PLL鎖相環的輸入時鐘有兩種類型:外部輸入時鐘和內部時鐘。當使用外部輸入時鐘時,需要注意時鐘頻率和STM32的數據手冊規定的最大值是否相符。當使用內部時鐘時,注意內部時鐘的頻率以及倍頻係數的選擇。

五、分頻器

分頻器可以將時鐘信號分頻為任何需要的頻率。在STM32中,分頻器的分頻比可以通過PSC和ARR兩個寄存器的值來控制。

/* Configure timer clock frequency to 100 kHz */
TIM2->PSC = 7199; // Prescaler = (F_CK / F_TIM) - 1
TIM2->ARR = 999;  // Auto-reload value = (F_TIM / F_PWM) - 1

以上代碼配置了一個定時器,其時鐘頻率為100kHz。

總結

STM32時鐘系統是嵌入式系統中最重要的部分之一。在使用時鐘系統時,需要了解系統時鐘控制器RCC、時鐘樹、PLL鎖相環以及分頻器的工作原理,根據具體應用場景進行相應的配置,以達到最優的性能。

原創文章,作者:HTPBM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/349520.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HTPBM的頭像HTPBM
上一篇 2025-02-15 17:10
下一篇 2025-02-15 17:11

相關推薦

  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論