stm32f030 使用16M晶体

2023-05-16

   大部分的开发板都是用8M晶体,代码也是用的8M晶体配置.

一次开发过程中因为板子体积有限,选择了SMD3225的晶振,在LCSC检索发现8M的晶体比16M普遍贵3倍多。 所以将代码适配为16M.

 修改的地方只动了两个地方;
  1. static void SetSysClock(void)
    将以下代码
 /* PLL configuration = HSE * 6 = 48 MHz */
    //                                     PLL时钟源            HSE 分频器           PLL 倍频器
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    
    //                HSE/PREDIV 作为PLL 输入时钟                 HSE不分频                  6倍频
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);

修改为

 /* PLL configuration = HSE * 6 = 48 MHz */
    //                                     PLL时钟源            HSE 分频器           PLL 倍频器
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    
    //                HSE/PREDIV 作为PLL 输入时钟                 HSE不分频                  3倍频
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL3);
  1. void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
    函数中有用到 HSE_VALUE, 为了一致将
    宏定义
#if !defined  (HSE_VALUE)     
#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/
#endif /* HSE_VALUE */

修改为

#if !defined  (HSE_VALUE)     
#define HSE_VALUE    ((uint32_t)16000000) /*!< Value of the External oscillator in Hz*/
#endif /* HSE_VALUE */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32f030 使用16M晶体 的相关文章

随机推荐