STM32如何使用內(nèi)部時(shí)鐘源當(dāng)系統(tǒng)時(shí)鐘
掃描二維碼
隨時(shí)隨地手機(jī)看文章
由于最近老師讓做一個(gè)項(xiàng)目,要用到STM32但是考慮成本問題,決定不用外部時(shí)鐘,所以在網(wǎng)上搜集整理了一些資料,加上自己的一些想法。
參考資料:
http://bbs.ednchina.com/BLOG_ARTICLE_3011869.HTM
http://bbs.21ic.com/icview-587714-1-1.html
首先在主程序中注釋掉SystemInit();
然后使用下面的函數(shù)做為系統(tǒng)時(shí)鐘的初始化函數(shù)
voidRCC_Configuration(void)
{
RCC_DeInit();//將外設(shè)RCC寄存器重設(shè)為缺省值
RCC_HSICmd(ENABLE);//使能HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);//等待HSI使能成功
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
//設(shè)置PLL時(shí)鐘源及倍頻系數(shù)
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_2);//使能或者失能PLL,這個(gè)參數(shù)可以取:ENABLE或者DISABLE
RCC_PLLCmd(ENABLE);//如果PLL被用于系統(tǒng)時(shí)鐘,那么它不能被失能
//等待指定的RCC標(biāo)志位設(shè)置成功等待PLL初始化成功
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
//設(shè)置系統(tǒng)時(shí)鐘(SYSCLK)設(shè)置PLL為系統(tǒng)時(shí)鐘源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//選擇想要的系統(tǒng)時(shí)鐘
//等待PLL成功用作于系統(tǒng)時(shí)鐘的時(shí)鐘源
//0x00:HSI作為系統(tǒng)時(shí)鐘
//0x04:HSE作為系統(tǒng)時(shí)鐘
//0x08:PLL作為系統(tǒng)時(shí)鐘
while(RCC_GetSYSCLKSource()!=0x08);//需與被選擇的系統(tǒng)時(shí)鐘對(duì)應(yīng)起來,RCC_SYSCLKSource_PLL
}
補(bǔ)充一點(diǎn):
由圖可以看出系統(tǒng)時(shí)鐘的供給可以有3種方式,HSI,HSE,PLL。如果選用內(nèi)部時(shí)鐘作為系統(tǒng)時(shí)鐘,其倍頻達(dá)不到72Mhz,最多也就8Mhz/2*16 = 64Mhz。