在使用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寄存器時,要注意一個寄存器位:
也就是CFGR寄存器的bit17和PREDIV[0]是同一個位,如果清零CFGR寄存器的bit17,PREDIV[0]也同時被清零;因此如果需要修改分頻參數,建議放在設置PLL倍頻參數之後。