1.时钟的驱动
有三种不同的时钟源可被用来驱动系统时钟:
● 内部高速 (HSI)8MHz RC 振荡器时钟
● 外部高速 (HSE) 振荡器时钟
● PLL 时钟
2.系统时钟的简介
在STM32中,我们说要配置系统时钟就是指的配置下图标识红色的部分“SYSCLK(系统时钟)”.系统时钟SYSCLK是同STM32中绝大部分期间工作的时钟源,如下图所示,系统时钟可以为IIC, AHB,APB,DMA等配置时钟。
3.系统时钟的配置
例:如果在外部接入8MHZ的晶振,需要配置成48MHZ的系统时钟。
分析:因为要使用8MHZ的外部时钟,得到48MHZ的系统时钟,则需要不分频使其倍频6倍得到系统时钟,因而我准备配置的路线如 下图所示
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;
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』