stm32 系統(tǒng)時(shí)鐘設(shè)置
掃描二維碼
隨時(shí)隨地手機(jī)看文章
如圖1:時(shí)鐘樹,可見Stm32有5個(gè)時(shí)鐘源。
8M HSI RC:內(nèi)部時(shí)鐘,從圖上看,有兩路分支,一個(gè)是直接作為系統(tǒng)時(shí)鐘SYSCLK使用,另一個(gè)是先二分頻后,再通過(guò)PLLMUL倍頻作為系統(tǒng)時(shí)鐘SYSCLK
4-16M HSE OSC:外部晶振作為時(shí)鐘源,可以看做有3路分支,第一是直接作為系統(tǒng)時(shí)鐘SYSCLK使用,第二個(gè)通過(guò)PLL倍頻后作為系統(tǒng)時(shí)鐘SYSCLK,第三個(gè)是128分頻后作為RTC時(shí)鐘輸入
32.768kHz LSE OSC:低速外部時(shí)鐘源,可直接用作RTC時(shí)鐘輸入
40kHz LSI RC:低速內(nèi)部時(shí)鐘源,有兩路分支,一個(gè)用作RTC時(shí)鐘,一個(gè)用作看門狗時(shí)鐘
PLLCLK:可以直接看做倍頻器,也不能說(shuō)得上是時(shí)鐘源,和以上某些時(shí)鐘源配合使用,配置系統(tǒng)時(shí)鐘
掌握以上幾個(gè)之后,直接看圖就很容易配置相應(yīng)的時(shí)鐘源了
一下以外部晶振8M通過(guò)倍頻作為系統(tǒng)時(shí)鐘使用
Stm32時(shí)鐘設(shè)置如圖:假如我們要設(shè)置PPL倍頻后的時(shí)鐘作為系統(tǒng)時(shí)鐘。首先,PLL時(shí)鐘來(lái)自兩個(gè)地方,一個(gè)是來(lái)自HSI2分頻得到,一個(gè)是來(lái)自HSE直接或者2分頻得到。我們用HSE作為PLL輸入源的話,則必須先使能HSE時(shí)鐘源,通過(guò)設(shè)置PLLXTPRE設(shè)置是否二分頻輸入。接著,既然選擇HSE為PLL輸入源,怎必須設(shè)置相應(yīng)寄存器把HSE作為PLL時(shí)鐘輸入。再就是設(shè)置倍頻PLLMUL位,把頻率上升到需要的頻率,注意最大頻率不能超過(guò)72MHz。最后設(shè)置AHB等分頻,供給系統(tǒng)外設(shè)。
圖1:時(shí)鐘樹
系統(tǒng)時(shí)鐘設(shè)置函數(shù)如下:
1 void SYSCLK_Init(u8 PLLMUL)//PLL倍頻值
2 {
3 RCC->CR"=1<<16;//HSEON=1 時(shí)鐘使能
4 while(RCC->CR&(1<<17)==0);//等待外部時(shí)鐘就緒
5
6 RCC->CFGR|=0X00000400;
7
8 RCC->CFGR&=~(1<<17);//HSE不分頻
9 RCC->CFGR|=1<<16;// 設(shè)置HSE作為PLL時(shí)鐘源
10 FLASH->ACR|=0x32;//FLASH 2個(gè)延時(shí)周期 注意:這里必須有,否則設(shè)置不成功
11
12 RCC->CFGR|=(PLLMUL-2)<<18;//9倍頻
13
14 RCC->CFGR&=0xffffff0c;//AHB不分頻
15 RCC->CFGR|=0x00000002;//PLL作為系統(tǒng)時(shí)鐘
16
17 RCC->CR|=1<<24;//enable pll
18 while((RCC->CR&1<<25)==0);//pll ready
19 }