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