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