從技術文件上得到stm32時鐘源有三種, hsi 振盪器時鐘 、hse 振盪器時鐘 、主 pll時鐘,由於每個時鐘的工作特性的差異,若想將系統時鐘設定為最高頻時需使用pll將基礎時鐘源進行倍頻。
由於使用外部晶振倍頻精確度會比內部**時鐘高很多,所以一般都是使用外部晶振,這跟我們使用庫開發是一樣的原理,所以一般的配置關鍵點大概如下圖紅框所示:
1、第一步首先要將外部hse時鐘開啟,等待**穩定後再進行下一步操作。
2、配置pll暫存器引數。
3、切換系統時鐘源。
第一步實現:
依據:
開啟hse時鐘源主要是控制cr暫存器的16位,然後開啟後硬體會自動將第17位置位,如果未成功則等待,當然在這個地方可以加入時間等待,如果超時說明開啟失敗,進行其他方法設定。
實現:
第二步實現:
依據:
在這裡技術文件上說明了各個引數的設定範圍:
2 ≤ pllq ≤ 15 、 pllp = 2、4、6 或 8、 192 ≤ plln ≤ 432 、 2 ≤ pllm ≤ 63
由於我想將stm32設定成最高頻168m,於是根據以上引數範圍以及計算方法,選擇一組設定引數如下:
pll_m = 8,pll_n = 336,pll_p = 1 (2分頻),pllq = 7;
引數確定便可以直接設定,這些位只能在 pll 已禁止時寫入。
實現:在這裡記錄一下自己的小心得,以前配置暫存器都是將要配置的數先算出來,耽誤時間,今天在看技術文件時突然發現直接用移位即可,且為提高**的可讀性,最好是選用或運算單個設定每個設定點。這樣看起來就舒服多了。
第三步實現:
依據:
這個時候就需要將系統時鐘切換過來了,主要是設定sw開關,然後再設定ahb、apb1、apb2、等時鐘,在上時鐘樹上可看出。
還是操作對應的位,在這裡又發現乙個小技巧,原來stm32系統標頭檔案已經做好這些設定的巨集定義,直接使用即可,而且從可讀性來說大大加強,如下圖所示。最後將設定好的時鐘通過mco1輸出,檢測。
實現:
然後就完美輸出,在這裡我不是很理解為什麼要新增這句,以前用msp430的時候好像也沒這個設定,而且我發現光設定cpu等待週期還不行,還得設定前面兩個引數,不然設定的時鐘偏差很大。
實際設定函式如下所示:
1最後兩分頻的波形顯示如下:void systemclockinit(void)2
67 rcc->cr &= ~rcc_cr_pllon;
8 rcc->pllcfgr = 0x00000000;9
//pll_m = 8,pll_n = 336,pll_p = 1 (2分頻)
10 rcc->pllcfgr |= 8
<< 0
;
11 rcc->pllcfgr |= 336
<< 6
;
12 rcc->pllcfgr |= 1
<< 16
; 13
14 rcc->pllcfgr |= 7
<< 24; //
配置pllq為48m
15 rcc->cr |=rcc_cr_pllon;
1617
while(!(rcc->cr &rcc_cr_pllrdy)){}
1819 flash->acr = flash_acr_icen | flash_acr_dcen | flash_acr_latency_5ws;
2021 rcc->cfgr |= rcc_cfgr_hpre_div1; //
不分頻使ahb時鐘為168m
22 rcc->cfgr |= rcc_cfgr_ppre2_div2; //
apb2 = 84m
23 rcc->cfgr |= rcc_cfgr_ppre1_div4; //
apb1 = 42m
2425 rcc->cfgr |=rcc_cfgr_sws_pll;
26 rcc->cfgr |=rcc_cfgr_sw_pll;
2728 rcc->cfgr |= 3
<< 21; //
pll輸出
29 rcc->cfgr |= 4
<< 24; //
2分頻
3031 }
到此配置就結束了,留有乙個問題,那就是stm32時鐘配置為啥要配置那個cpu等待週期,也就是這條語句:
STM32時鐘配置
大家都知道在使用微控制器時,時鐘速度決定於外部晶振或內部rc振盪電路的頻率,是不可以改變的。而arm的出現打破了這一傳統的法則,可以通過軟體隨意改變時鐘速度。這一出現讓我們的設計更加靈活,但是也給我們的設計增加了複雜性。為了讓使用者能夠更簡單的使用這一功能,stm32的庫函式已經為我們設計的更加簡單...
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暫存器 其實滴答定時器很簡單,就是設定初值,然後延遲,最後就是...