[笔记]STM32使用非8M晶振时如何修改代码

    目前能找到的大部分代码都是默认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。

转载于:https://www.cnblogs.com/Ilmen/p/3344726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值