STM32F103官方库默认是8M晶振,改成 16M 3225-4Pin的晶振,需要对时钟配置做如下修改:
1、把stm32f10x.h中的HSE_VALUE宏定义改成16M
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
改成:
#define HSE_VALUE ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */
最终如下:
#if !defined HSE_VALUE
#ifdef STM32F10X_CL
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
//#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#define HSE_VALUE ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */
2、修改system_stm32f10x.c 文件中的 SetSysClockTo72函数,将HSE先2分频后再倍频,
变成 PLLCLK = HSE /2 * 9 = 72 MHz */ 16 /2 *9 = 72M
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_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9);
经过这两步修改后,即可正常工作。
注:在调试的时候出现串口在256000波特率时乱码,原因是RS232转换芯片不支持这么高的波特率