PAGE1
PAGE1
STM32F0系列的时钟配置
1.时钟源概述
STM32F0系列微控制器提供了多种时钟源,以满足不同应用场景的需求。这些时钟源包括内部时钟源和外部时钟源,具体如下:
内部时钟源(InternalClockSources)
HSI(High-SpeedInternalClock):8MHz工厂预校准的内部高速振荡器。
LSI(Low-SpeedInternalClock):32kHz内部低速振荡器,主要用于RTC(实时时钟)和低功耗模式。
外部时钟源(ExternalClockSources)
HSE(High-SpeedExternalClock):外部高速时钟,可以是晶体振荡器或陶瓷谐振器,最高支持16MHz。
LSE(Low-SpeedExternalClock):外部低速时钟,通常为32.768kHz晶体振荡器,用于RTC和低功耗模式。
2.时钟树
STM32F0系列的时钟树结构决定了系统时钟的生成和分配。时钟树的主要组成部分包括:
HSI和HSE时钟
PLL(Phase-LockedLoop)
系统时钟(SYSCLK)
AHB总线时钟
APB1总线时钟
APB2总线时钟
时钟树的配置涉及到多个寄存器,如RCC_CR(ResetandClockControlRegister)、RCC_CFGR(ClockConfigurationRegister)等。通过这些寄存器,可以设置时钟源、分频系数和时钟输出等参数。
3.系统时钟配置
系统时钟(SYSCLK)是STM32F0系列微控制器的主要时钟源,用于驱动CPU和其他系统外设。系统时钟的配置步骤如下:
选择时钟源:可以选择HSI、HSE或PLL作为系统时钟源。
设置分频系数:根据需要设置分频系数。
启用PLL:如果选择PLL作为系统时钟源,需要配置PLL的输入和输出频率。
切换系统时钟:将系统时钟切换到所选的时钟源。
3.1选择HSI作为系统时钟源
//选择HSI作为系统时钟源
voidset_sysclk_to_hsi(void){
//使能HSI时钟
RCC-CR|=RCC_CR_HSION;
//等待HSI时钟稳定
while(!(RCC-CRRCC_CR_HSIRDY)){}
//选择HSI作为系统时钟源
RCC-CFGR=~RCC_CFGR_SW;
RCC-CFGR|=RCC_CFGR_SW_HSI;
//等待系统时钟切换完成
while((RCC-CFGRRCC_CFGR_SWS)!=RCC_CFGR_SWS_HSI){}
}
3.2选择HSE作为系统时钟源
//选择HSE作为系统时钟源
voidset_sysclk_to_hse(void){
//使能HSE时钟
RCC-CR|=RCC_CR_HSEON;
//等待HSE时钟稳定
while(!(RCC-CRRCC_CR_HSERDY)){}
//选择HSE作为系统时钟源
RCC-CFGR=~RCC_CFGR_SW;
RCC-CFGR|=RCC_CFGR_SW_HSE;
//等待系统时钟切换完成
while((RCC-CFGRRCC_CFGR_SWS)!=RCC_CFGR_SWS_HSE){}
}
3.3配置PLL并选择PLL作为系统时钟源
//配置PLL并选择PLL作为系统时钟源
voidset_sysclk_to_pll(uint32_tpll_source,uint32_tpll_factor){
//使能PLL时钟
RCC-CR|=RCC_CR_PLLON;
//等待PLL时钟稳定
while(!(RCC-CRRCC_CR_PLLRDY)){}
//配置PLL源和乘法因子
RCC-CFGR=~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLMUL);
RCC-CFGR|=(pll_source16)|(pll_factor18);
//选择PLL作为系统时钟源
RCC-CFGR=~RCC_CFGR_SW;
RCC-CFGR|=RCC_CFGR_SW_PLL;
//等待系统时钟切换完