stm32修改系统时钟经验

在使用stm32开发的过程中,有时需要手动修改系统时钟参数,使板子上的晶振和目标系统时钟匹配。在此记录一下对时钟配置代码的理解。

1.需要修改的文件:system_stm32f0xx.c、stm32f0xx.h

2.system_stm32f0xx.c文件里面,如果有PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */这种宏定义参数(例如F4系列),只需要按照公式修改相应参数,

否则需要修改SetSysClock() 函数(例如F0系列):

时钟初始化时会先清空相应寄存器,然后在SetSysClock函数中进行设置,锁相环倍频参数一般比较明显:

    /* PLL configuration = HSE * 6 = 48 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));

    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);

但如果要设置分频参数,可能要自己添加代码(库函数可能会用默认参数,不分频),这时设置CFGR2寄存器时,要注意一个寄存器位:

stm32修改系统时钟经验_第1张图片

也就是CFGR寄存器的bit17和PREDIV[0]是同一个位,如果清零CFGR寄存器的bit17,PREDIV[0]也同时被清零;因此如果需要修改分频参数,建议放在设置PLL倍频参数之后。

你可能感兴趣的:(stm32编程技巧)