• 沒有找到結果。

系統時脈管理

重置與時脈控制(RCC)是用來實現 STM32 微控器的時脈管理,其管理 外部、內部和外設的時脈,設置、打開和關閉這些時脈。對於ARM 微控器 來說,CPU 和匯流排以及外設的時脈設置是非常重要的,因為時脈設定錯 誤就無法產生正確的時序,組合電路時脈設定錯誤則會造成I/O 控制混亂。

STM32 微控器有三種不同的時脈來源可被用來驅動系統時脈,外部高 速時脈(HSE) ,內部高速時脈(HSI),相鎖迴路時脈(PLL)。另外還有兩個次 級時脈來源:40KHz 低速內部 RC 時脈,32.768KHz 低速外部晶體振盪時脈。

使用者可透過多重分頻器設置 AHB、高速 APB2 和低速 APB1 裝置區域的 頻率。其中 AHB 和 APB2 裝置區域的最大工作頻率是 72MHz,而 APB1 裝置區域的最高頻率是36MHz。另外 SDIO 介面的工作頻率固定為 CLK/2,

USB介面的工作頻率為48MHz。系統主頻率通過AHB除8倍頻後,提供給 Cortex™系統計數器(SysTick)使用 [1]。

詳細的重置與時脈控制(RCC)資訊請參考意法半導體公司的使用手冊 RM0008 Referance Manual ch.6 [1]。

外部高速時脈(HSE)

外部高速時脈(HSE)可以由兩種時脈型態供應,一個為使用外部晶體振 盪器(Crystal)或陶瓷共振器(Ceramic resonator),另一個為使用外部時脈產生 器(External clock)。如果是由外部晶體振盪器來產生時脈,晶體振盪器的頻 率範圍為 4 至 16MHz。而在使用外部時脈產生器的情況下,頻率範圍最高 可達25MHz。

圖2-2 為外部高速時脈的使用方式,圖(a)為使用外部時脈來源時,由 OSC_IN 輸入。圖(b)為使用外部振盪器的連接方式。

(a)

外部時脈來源

(b)

外部振盪器 圖 2-2 HSE/LSE 時脈來源 [1]

內部高速時脈(HSI)

內部高速時脈(HSI)是由微控器內部的 RC 振盪器來產生的,它的工作 頻率為 8MHz,可直接供應給系統頻率分配器使用,或除 2 後供應給 PLL 當來源。其主要目的為減少外部元件並提供低價位的時脈來源。

相鎖迴路(PLL)

相鎖迴路(PLL)主要是用來倍頻內/外部高速時脈,並提供給系統當作主 頻率來源,也會直接提供給高速設備電路如USB 使用。相鎖迴路的倍頻倍 數為2 到 16 倍,但是輸出頻率最高為 72MHz。

圖2-3 為相鎖迴路與內部高速時脈的電路,系統頻率(SYSCLK)可選擇 由HSE、HSI 或 PLLCLK 當來源。而 PLLCLK 頻率來源可選擇由 HSI 或 HSE 經過 PLLMUL 倍頻後輸入。

外部低速時脈(LSE)

外部低速時脈(LSE)是由 32.768KHz 的外部晶體或陶瓷共振器所產生,

其主要功能為,提供系統Real-Time Clock 電路所需的低功耗且準確的時脈 來源。

Ecternal Source

OSC_IN OSC_OUT External Clock

(HiZ)

Crystal/Resonator

OSC_IN OSC_OUT

CL1 CL2

圖 2-3 內部高速時脈(HSI)與相鎖迴路(PLL)電路 [1]

內部低速時脈(LSI)

內部低速時脈(LSI)是由微控器內部的 RC 振盪器來產生的,其頻率大 約落在30KHz 到 60KHz 之間,可以用來取代外部低速時脈的功能。另外也 可以在微控器進入待機模式下保持動作,為Watchdog 電路與自動喚醒電路 提供時脈來源。

圖2-4 為低速時脈的電路,主要做為 RTC 電路的頻率來源,可以選擇 由LSE、LSI 或 HSE 除 128 來做為來源。另外,LSI 又提供給看門狗電路 (Watchdog)使用。

圖 2-4 內/外部低速時脈(LSE/LSI)電路 [1]

STM32 微控器使用重置與時脈控制暫存器(RCC)來設定系統主要的頻 率來源,也可以設定與啟動內置功能電路的頻率。其中RCC_CR 暫存器用

HSE

HSE

APB2 等區域功能的頻率,而 RCC_AHBENR/APB1ENR/APB2ENR 等暫存 器則是用來控制各個功能的頻率啟動。

當系統程式開始執行時,第一步驟需要先設定好STM32 微控器使用的 主頻率來源,再根據頻率來源的頻率來配置內部各裝置的時脈。在本文的 應用中,我們使用外部高速時脈(HSE)功能連接 8MHz 振盪器,外部低速時 脈(LSE) 連接 32.768KHz 振盪器,設定 PLL 頻率為 72MHz(9 倍頻),來當 作主系統時脈(SysCLK),設定 AHB 分頻器後的 HCLK 為 72MHz,高速 APB2 區域的時脈為72MHz,低速 APB1 區域的時脈為 36MHz。

圖 2-5 為本系統的應用電路,PD0 與 PD1 連接 8MHz 外部高速時脈;

PC14 與 PC15 連接 32.768KHz 外部低速時脈(LSE)。

圖 2-5 主頻率來源電路

我們可以使用兩種方式來設定STM32 微控器的頻率來源,圖 2-6 為設 定STM32 微控器頻率來源與頻率配置 RCC_Initial ( ) 的副程式,本系統使 用8MHz HSE 提供給 PLL,並且倍頻 9 倍至 72MHz,當設置好參數後,將 HSE_ON 與 PLL_ON 位元設為 1,以啟動 HSE 與 PLL 電路,最後等待 HSE 與PLL 發出準備完成的狀態旗標,以表示頻率正常。

程式名稱:RCC_Initial ( ) 功能敘述:設定系統頻率

輸 入:HSE,PLL 頻率來源 輸 出:無

viod RCC_Initial (void)

{ RCC->CFGR |= (7<<18); // PLLMUL[3:0] : PLL * 9 = 72MHZ RCC->CFGR |= (0<<17); // HSE clock not divided

RCC->CFGR |= (1<<16); // PLLSRC = 1 : HSE INPUT RCC->CFGR |= (0<<11); // PPRE2[2:0] APB2CLK=HCLK RCC->CFGR |= (4<<8); // PPRE1[2:0] APB1CLK=HCLK/2 RCC->CFGR |= (0<<4); // HPRE[2:0] AHBCLK=SysCLK RCC->CFGR |= (2<<0); // SW[1:0] : SYSTEM CLK = PLL CLK RCC->CR |= (1<<16); // 開啟HSE

while ((RCC->CR & (1<<17))==0); // 等待 HSE ready RCC->CR |= (1<<24); // 開啟PLL while ((RCC->CR & (1<<25))==0); // 等待 PLL ready }

圖 2-6 RCC 初始設定程式

圖 2-7 為使用編譯軟體所提供的 STM32_Init.c 程式庫,其內建了 RCC 暫存器的設定選單,利用下拉選單的方式來設定系統頻率來源與 PLL 倍頻 倍數,以及各區域的工作頻率。

相關文件