stm32f107
的時鐘設定
stm32
的庫函式好像只有外部
8m倍頻到
72m,現在用的板子外部
25m的晶振,如何倍頻到
72m呢?
解決辦法:
stm32f107
的時鐘分
4步的:
1>25mhz先除5
分頻到5mhz;
2>再8
倍頻到40mhz;
3>再5
分頻到8mhz;
4>再9
倍頻到72mhz.
stm32f103
和stm32f105/stm32f107
的rcc
設定是不一樣的,仔細查
st的參考手冊,很容易得到答案的,新版的庫中,有
stm32f105/stm32f107
的時鐘設定**,通過全域性巨集來選定的。看一下《
stm32f10x.h
》中的開頭部分的巨集判斷。
errorstatus hsestartupstatus;
rcc_deinit();
rcc_hseconfig(rcc_hse_on);
hsestartupstatus =rcc_waitforhsestartup();
if(hsestartupstatus== success)
rcc_prediv1config(rcc_prediv1_source_pll2,rcc_prediv1_div5);
rcc_pllconfig(rcc_pllsource_prediv1,rcc_pllmul_9);
rcc_pll3config(rcc_pll3mul_11);
rcc_pll3cmd(enable);
while(rcc_getflagstatus(rcc_flag_pll3rdy) ==reset){}
rcc_i2s3clkconfig(rcc_i2s3clksource_pll3_vco);
rcc_i2s2clkconfig(rcc_i2s2clksource_pll3_vco);
#endif
rcc_pllcmd(enable);
while(rcc_getflagstatus(rcc_flag_pllrdy)== reset)
rcc_sysclkconfig(rcc_sysclksource_pllclk);
while(rcc_getsysclksource()!= 0x08) }
函式庫的不斷公升級,到
3.0以上時,我們就不用再這樣編寫時鐘設定了,我們只要做如下兩部即可:
第乙個:system_stm32f10x.c
中#definesysclk_freq_72mhz 72000000
第二個:呼叫
systeminit()
說明:在
stm32
韌體庫3.0
中對時鐘頻率的選擇進行了大大的簡化,原先的一大堆操作都在後台進行。系統給出的函式為
systeminit()
。但在呼叫前還需要進行一些巨集定義的設定,具體的設定在
system_stm32f10x.c
檔案中。
檔案開頭就有乙個這樣的定義:
//#definesysclk_freq_hse hse_value
//#definesysclk_freq_20mhz 20000000
//#definesysclk_freq_36mhz 36000000
//#definesysclk_freq_48mhz 48000000
//#definesysclk_freq_56mhz 56000000
#definesysclk_freq_72mhz 72000000
st官方推薦的外接晶振是
8m,所以庫函式的設定都是假定你的硬體已經接了
8m 晶振來運算的
.以上東西就是預設晶振
8m 的時候
,推薦的
cpu
頻率選擇
.在這裡選擇了:
#definesysclk_freq_72mhz 72000000
也就是103系列能跑到的最大值
72m
然後這個
c檔案繼續往下看
#elif definedsysclk_freq_72mhz
const uint32_tsystemfrequency =sysclk_freq_72mhz;
const uint32_tsystemfrequency_sysclk = sysclk_freq_72mhz;
const uint32_tsystemfrequency_ahbclk = sysclk_freq_72mhz;
const uint32_tsystemfrequency_apb1clk = (sysclk_freq_72mhz/2);
const uint32_tsystemfrequency_apb2clk = sysclk_freq_72mhz;
這就是在定義了
cpu跑
72m的時候
,各個系統的速度了
.他們分別是
:硬體頻率
,系統時鐘
,ahb
匯流排頻率
,apb1
匯流排頻率
,apb2
匯流排頻率
.再往下看
,看到這個了:
#elif definedsysclk_freq_72mhz
static void setsysclockto72(void);
這就是定義
72m
的時候,
設定時鐘的函式
.這個函式被
setsysclock ()
函式呼叫,而
setsysclock ()
函式則是被
systeminit()
函式呼叫.最後
systeminit()函式,
就是被你呼叫的了。
所以設定系統時鐘的流程就是
: 首先使用者程式呼叫
systeminit()函式,
這是乙個庫函式,然後
systeminit()
函式裡面
,進行了一些暫存器必要的初始化後
,就呼叫
setsysclock()
函式. setsysclock()
函式根據那個
#definesysclk_freq_72mhz 72000000
的巨集定義
,知道了要呼叫
setsysclockto72()
這個函式,於是
,就一堆麻煩而複雜的設定
~!@#$%^
然後,cpu
跑起來了
,而且速度是
72m.
stm32f107:
STM32F107的時鐘設定
stm32的庫函式好像只有外部8m倍頻到72m,現在用的板子外部25m的晶振,如何倍頻到72m呢?解決辦法 stm32f107的時鐘分4步的 1 25mhz先除5分頻到5mhz 2 再8倍頻到40mhz 3 再5分頻到8mhz 4 再9倍頻到72mhz.stm32f103和stm32f105 stm...
STM32F107的串列埠通訊總結
stm32f107的串列埠通訊總結 stm32f107 的串列埠通訊總結 1.stm32 的一般規律,首先要使用串列埠必先使能串列埠時鐘,比如串列埠1 rcc apb2periphclockcmd rcc apb2periph usart1,enable 2.串列埠使用的gpio口設定 首先使能gp...
野火STM32F429設定的時鐘頻率
一 1.系統時鐘 sysclk sysclk pllclk 180mhz.2.hclk ahb匯流排時鐘 系統時鐘sysclk經過ahb預分頻器分頻之後得到的時鐘叫apb匯流排時鐘,即hclk,大部分外設的時鐘都是經過hclk分頻得到,我們這裡設定1分頻hclk sysclk 180hmz。3.pc...