您的位置:首页 > 编程语言

STM32使用非8M晶振时如何修改代码

2016-10-13 13:06 197 查看
目前能找到的大部分代码都是默认8M外部晶振的,若使用的晶振不是8M则需要作一些修改。例如这次我使用的外部晶振是12M的,作如下修改。

    1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)处的值(改为12MHz)。此处修改影响Debug时观察到的时钟数值。

    


 

    2.在system_stm32f10x.c开头的注释里有:

* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on
*    the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file.
*    When HSE is used as system clock source, directly or through PLL, and you
*    are using different crystal you have to adapt the HSE value to your own
*    configuration.


       根据描述,将stm32f10x.h中大约在0121行找到,修改掉。

#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)12000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */


    不过很奇怪的是,即使修改了此处的值,PLL的时钟还是不正确(程序依旧讲PLL按9倍频配置)。此处有待进一步探究(目前暂时只知道编译的代码没有用到HSE_VALUE)。

 

    3.顺着代码寻找原因,最后发现真正起作用的部分在system_stm32f10x.c里的SetSysClockTo72(void)函数(0993行,这里假设我们希望MCU工作在72MHZ)。

        在1058行有这样一段代码:

#else
/*  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);


       注释部分是函数自带的,真正起作用的部分在这里,因此把RCC_CFGR_PLLMULL9改为RCC_CFGR_PLLMULL6。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: