STM32F1使用12M晶振
STM32F1官方默认及大部分场合下都是使用8MHz的外部晶振,STM32F1最大的主频时钟是72MHz,超频的除外。理论上,采用外部时钟作为时钟源时,可以选择4M、8M、12M等晶振,如果MCU使用最高72M主频,对于常用的8M晶振,配置MCU内部为8倍频即可,而在使用12M晶振,配置为6倍频即可。
一般情况下,使用一款MCU时,建议采用官方推荐大小频率的晶振,过高频率的晶振对于外部电路来说,易产生辐射,EMC认证有相关要求。低频率晶振则需MCU内部倍频器支持。12MHz晶振是使用较为广泛,如8051 MCU、NXP系列MCU等都默认12M。如果产品种类多,使用了不同品牌的MCU,为了减少物料使用种类,可统一使用12M晶振。
对于STM32F1使用12M晶振,只需对库文件作部分修改。
1)打开“stm32f10x.h”,将119行中8M的晶振主频
#define HSE_VALUE ((uint32_t)8000000)
修改为12M
#define HSE_VALUE ((uint32_t)12000000)
2)打开“system_stm32f10x.c”,修改PLL参数,将1054——1057行中的72MHz主频配置参数
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC| RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLMULL9);
修改为
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC| RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLMULL6);
另外:若要使用其他频率主频,则修改对应的倍频系数,如使用24MHz主频修改倍频系数为“RCC_CFGR_PLLMULL2”,36MHz主频修改倍频系数为“RCC_CFGR_PLLMULL3”,其他依次类推。
3)工程配置修改,将晶振主频修改为12MHz,“Options for Target—>Target”。