STM32之系統時鐘

2021-06-12 02:34:42 字數 1705 閱讀 7986

使用stm32已經有一段時間,為了快速完成任務習慣性在已有**的基礎上進行部分修改,而沒有仔細閱讀資料手冊,詳細分析引數設定的緣由。現將逐步將stm32的各部分內部結構一次進行細節的學習,今天進行stm32的時鐘部分。

stm32f103系列時鐘最高可以至72mhz,時鐘**包括hse(外部高速時鐘)、lse(外部低速時鐘)、hsi(內部高速時鐘)、lsi(內部低速時鐘)四種方式。hse支援4m--16mhz範圍,lse為32khz(通常32.768k,用於rtc),hsi為8mhz,lsi為40khz(該時鐘源不是穩定的40k,會有波動)。

(1)sysclk

系統時鐘有三個**,分別為hsi(8m)、pllslk(根據**時鐘和倍頻係數確定)、hse(4m--16m),時鐘源的選擇根據sw的

設定決定。

sw[1:0]

時鐘源00

hsi01

hse10

pllslk

(2) pllslk

pllslk = pll的時鐘源頻率 * pll倍頻係數。 pll的時鐘源由兩個,乙個是hsi(二分頻)、乙個是hse(不分頻或者二分頻,

由pllxtpre位決定)。pll時鐘源的選擇由pllsrc來決定。pll倍頻係數由pllmul決定,倍頻係數範圍為2--16。

pllxtpre

hse分頻器

0hse不分頻

1hse二分頻

pllsrc

pll時鐘源選擇

0hsi二分頻

1hse

(3) 系統時鐘初始化過程分析

時鐘初始化**根據pll做為系統時鐘源進行分析,**如下:

void stm32_clock_init(u8 pll) 

rcc暫存器的具體使用參考stm32資料手冊第六章中關於rcc暫存器的描述。

第一步:復位、配置向量表(本節不做詳細描述)。

第二部:開啟外部時鐘並等待其就位。rcc->cr|=0x00010000,將rcc控制暫存器的第16位置1,時能外部高速時鐘;

while(!(rcc->cr>>17));         檢測rcc控制暫存器的第17位是否為1(1表示外部時鐘就緒)。

第三部:設定pll。rcc->cfgr=0x00000400,設定時鐘配置暫存器的低速apb預分頻為2分頻(由於apb1最大時鐘為36mhz,所以設定為2分頻保證其一定可以工作,具體引數可以根據實際修改);pll-=2,

rcc->cfgr|=pll<<18,

時鐘配置暫存器的pllmul倍頻係數與該暫存器的設定值之間相差2,所以首先將pll減去2,然後左移18位進行pll倍頻係數設定; rcc->cfgr|=1<<16,選擇hse作為pll的時鐘源,pllxtpre預設設定為0,hse作為pll時鐘輸入不分頻;

rcc->cr|=0x01000000,rcc控制暫存器的24位置1,使能pll;while(!(rcc->cr>>25)),等待rcc控制暫存器的25位置1,表示pll鎖定。

第四步:選擇sysclk時鐘源。rcc->cfgr|=0x00000002,設定時鐘配置暫存器的sw[1:0]選擇pllslk作為時鐘源;

while(temp!=0x02)

pll作為時鐘源設定成功後由硬體將時鐘配置暫存器的sws[1:0]設定為10,表示pll輸出作為系統時鐘。

完成以上四步,系統時鐘設定完成。

STM32系統時鐘

1 參考資料 stm32f1開發指南 庫函式版本 4.3小節 時鐘系統 stm32中文參考手冊v10 第六章 復位和時鐘控制 rcc 2 時鐘系統知識總結 1 stm32有5個時鐘源 hsi hse lsi lse pll hsi是高速內部時鐘,rc振盪器,頻率為8mhz,精度不高 hse是高速外部...

stm32系統時鐘

hsi 約等於8mhz rc振盪器產生的時鐘 hse 外部時鐘 css 如果檢測到外部時鐘的損壞,自動切換到hsi 系統時鐘和rtc時鐘 均有三個 systick定時器 簡單的定時器,常用來做延時和心跳時鐘 24位的倒計時定時器 ctrl暫存器 其實滴答定時器很簡單,就是設定初值,然後延遲,最後就是...

STM32 系統時鐘設定

stm32f103rbt6採用外部時鐘8mhz,利用軟體可以將系統時鐘設定為72mhz。在啟動檔案startup stm32f10x md.s中,有這樣兩句話 import main 從外部檔案引入main函式 import systeminit 從外部檔案引入systeminit檔案 當晶元上電復...