单片机 > 单片机程序设计 > 详情

STM32 系统时钟的配置

发布时间:2024-07-31 发布时间:
|

1.时钟的驱动 
有三种不同的时钟源可被用来驱动系统时钟: 
● 内部高速 (HSI)8MHz RC 振荡器时钟 
● 外部高速 (HSE) 振荡器时钟 
● PLL 时钟

2.系统时钟的简介 
在STM32中,我们说要配置系统时钟就是指的配置下图标识红色的部分“SYSCLK(系统时钟)”.系统时钟SYSCLK是同STM32中绝大部分期间工作的时钟源,如下图所示,系统时钟可以为IIC, AHB,APB,DMA等配置时钟。 
CLOCK TREE

3.系统时钟的配置 
例:如果在外部接入8MHZ的晶振,需要配置成48MHZ的系统时钟。 
分析:因为要使用8MHZ的外部时钟,得到48MHZ的系统时钟,则需要不分频使其倍频6倍得到系统时钟,因而我准备配置的路线如 下图所示 
System Clock configurate 
3.1 因为要得到48MHZ的系统时钟,则选用HSE外部震荡时钟进行驱动。在RCC->CR寄存器中使HSEON位为1,则表示HSE振荡器开启; 
3.2 由硬件设置, 表明 HSE 振荡器是否稳定。仍是RCC-CR寄存器,当HSE振荡器就绪时,硬件将置HSERDY位为1. 
3.3 在图中应该可以看出,下一步是进行RCC->CFGR2寄存器例PREDIV分频的操作了,但是请注意PREDIV[3:0] PREDIV 分频因子 
这些位用于设置或清除 PREDIV 分频因子。 这些位仅能在 PLL 关闭些改写。所以在此之前应该要先关闭PLL。所以使RCC->CR寄存器里的PLLON关闭。等待PLLRDY位锁定。 
3.4 开始进行RCC->CFGR2寄存器例PREDIV分频的操作了,但是因为我们不分频只倍频,所以PREDIV[3:0] PREDIV 分频因子为0000(不分频). 
3.5 开始由RCC->CFGR里的PLLSRC(输入时钟源)开关置1选择HSE/PREDIB作为PLL输入时钟。并且进入RCC->CFGR里的PLLMUL为进行倍频选择,我们要6倍倍频,所以选择倍频因子为6(0100) 
3.6 倍频完后,使能寄存器RCC->CR的PLLON位,并且等待硬件置位RC->CR寄存器里的PLLRDY。 
3.7 在过SW开关时选择PLLCLK输出作为系统时钟 
3.8 使能GPIO时钟

void SystemClock(void) 

RCC->CR|=RCC_CR_HSEON; 
while(!(RCC->CR&RCC_CR_HSERDY)); 
RCC->CR&=~RCC_CR_PLLON; 
while(RCC->CR&RCC_CR_PLLRDY); 
RCC->CFGR2=RCC_CFGR2_PREDIV_DIV1; 
RCC->CFGR=RCC_CFGR_PLLSRC|RCC_CFGR_PLLMUL6; 
RCC->CR|=RCC_CR_PLLON; 
while(!RCC->CR&RCC_CR_PLLRDY); 
RCC->CFGR=(RCC->CFGR&~RCC_CFGR_SW)|RCC_CFGR_SW_PLL; 
while((RCC->CFGR&RCC_CFGR_SWS)!=RCC_CFGR_SWS_1); 
RCC->AHBENR|=RCC_AHBENR_GPIOAEN; 
return; 
}


关键字:STM32  系统时钟  配置 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430低功耗模式-while循环失效