技术工程师: QQ 2357481431
公司网站:http://www.csgsm.com
店铺:http://520ic.taobao.com/
创造奇迹 思索未来 科技共赢!
1
由于 STM32F10x 库官方采用的是默认的外接 8MHz 晶振,因此造成很多用户也采用了 8MHz 的晶振,但是,8MHz 的晶振不是必
须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行。
在论坛上看到很多用户反映,使用外接 12MHz 的晶振,会造成很多的问题,如 USART 的波特率不正确,Systick 走时不准等问
题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪 ST 官方,我们必须肯定 ST 官方为方便用户开发
所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用 4—16MHz 之内任何频点的晶振,我们以
STM32F10x_StdPeriph_Lib_V3.4.0 为例说明。
第一步,打开 stm32f10x.h,stm32f10x_conf.h 将
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
修改为:
#define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
第二步,打开 system_stm32f10x.c,main.c->RCC_Configuration 修改 PLL 参数,将
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
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);
修改为:
/* PLL configuration: PLLCLK = HSE * 6 = 72 MHz */
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);
至此,原文件已经修改完成,如果你想将主频修改至其他频率,请自行修改。但是,到现在,如果您直接编译调试的话,就会
出现上文所说的 USART 的波特率不正确,Systick 走时不准等问题,原因就是我们需要进行第三部的修改,这个修改不是在原文件
中,而是在编译环境中。我们已 Keil MDK 为例说明。
第三步,打开你已经建立的 STM32 工程,选择 Projects-〉Options for target ***,找到 Target 标签,你会发现,外接的晶振默认
还是 8MHz,我们将外接的晶振参数修改为 12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设
置波特率为 9600,它也不会跑到 14400,设置 Systick 为 1ms 中断,它不会 1.5ms 中断。
现在,我们也得出了一个结论,在 keil MDK 编译环境的设置参数的优先级是高于原文件中的设置的。