大部分的开发板都是用8M晶体,代码也是用的8M晶体配置.
一次开发过程中因为板子体积有限,选择了SMD3225的晶振,在LCSC检索发现8M的晶体比16M普遍贵3倍多。 所以将代码适配为16M.
修改的地方只动了两个地方;
- static void SetSysClock(void)
将以下代码
/* PLL configuration = HSE * 6 = 48 MHz */
// PLL时钟源 HSE 分频器 PLL 倍频器
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
// HSE/PREDIV 作为PLL 输入时钟 HSE不分频 6倍频
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);
修改为
/* PLL configuration = HSE * 6 = 48 MHz */
// PLL时钟源 HSE 分频器 PLL 倍频器
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
// HSE/PREDIV 作为PLL 输入时钟 HSE不分频 3倍频
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL3);
- void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
函数中有用到 HSE_VALUE, 为了一致将
宏定义
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/
#endif /* HSE_VALUE */
修改为
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)16000000) /*!< Value of the External oscillator in Hz*/
#endif /* HSE_VALUE */