一、時鐘系統概述
時鐘是嵌入式系統中最重要的部分之一。在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-hk/n/349520.html