STM32F103外部晶振8MHZ改为16MHz的使用

STM32F103外部晶振8MHZ改为16MHz的使用


目录

  • STM32F103外部晶振8MHZ改为16MHz的使用
  • 前言
  • 一、修改标准函数库的方法
    • 1、stm32f10x.h修改HSE_VALUE
    • 2 、system stm32f10x.c的SetSysClockTo72()函数修改
    • 3、不同晶振的统一配置的方式
    • 4 、时间晶振修改
    • 5、修改Target内晶振参数为16
  • 二、修改Hal函数库的方法
    • 1.stm32f4xx_hal_conf.h修改HSE_VALUE
    • 2、修改main.c中的PLLM值为对应晶振的频率


前言

最近使用别人的电路板编写软件,烧录程序后发现一直无法跑起来,一旦进行了时钟的初始化操作整个程序直接跑飞,估计肯定是时钟的问题。发现电路板采用16M的晶振而之前一直使用8M,将程序晶振程序修改为16M后就可以正常的运行了

一、修改标准函数库的方法

标准函数库目前已经不是主流了,但是有些老的项目移植会用
函数库的.h文件只要将.C下展开就可以找到

1、stm32f10x.h修改HSE_VALUE

将原来的HSE_VALUE值修改为
#define HSE_VALUE ((uint32_t)16000000)
STM32F103外部晶振8MHZ改为16MHz的使用_第1张图片

2 、system stm32f10x.c的SetSysClockTo72()函数修改

注意这里是.C文件,16MHz需要先2分频,修改为
STM32F103外部晶振8MHZ改为16MHz的使用_第2张图片

3、不同晶振的统一配置的方式

在之上的修改位置更改为以下代码
在.h文件加入以下宏配置

//  晶振源配置
// <8000000=> 8MHz外部晶振
// <12000000=> 12MHz外部晶振
// <16000000=> 16MHz外部晶振
#ifndef EXT_OSC_SOURCE
#define EXT_OSC_SOURCE 16000000
#endif

修改stm32f10x.h中的内容,如下

#define HSE_VALUE    ((uint32_t)EXT_OSC_SOURCE) /*!< Value of the External oscillator in Hz */

修改system stm32f10x.c中的内容,如下

#if EXT_OSC_SOURCE == 8000000
    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);
#elif EXT_OSC_SOURCE == 12000000
   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);
#else EXT_OSC_SOURCE == 16000000
	 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                 RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL));
   RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

4 、时间晶振修改

用到了RCC晶振的触发时间也需要修改
在这里插入图片描述

5、修改Target内晶振参数为16

STM32F103外部晶振8MHZ改为16MHz的使用_第3张图片

二、修改Hal函数库的方法

当然可以直接通过CubeMX的时钟配置页面直接修改。

1.stm32f4xx_hal_conf.h修改HSE_VALUE

将原来的HSE_VALUE值修改为
#define HSE_VALUE 16000000U
STM32F103外部晶振8MHZ改为16MHz的使用_第4张图片

2、修改main.c中的PLLM值为对应晶振的频率

我这里使用正点原子的函数,可以看到用的是x9,我们用16Mz只需要使用x4
STM32F103外部晶振8MHZ改为16MHz的使用_第5张图片STM32F103外部晶振8MHZ改为16MHz的使用_第6张图片
修改后
STM32F103外部晶振8MHZ改为16MHz的使用_第7张图片
这里是直接调用函数大致的调整了下,需要非常精确需要在HAL_RCC_OscConfig中设置参数
STM32F103外部晶振8MHZ改为16MHz的使用_第8张图片


小记:
其他型号的stm芯片基本都是这样修改晶振的,也提醒了我在写程序前要检查下硬件的外部晶振,不一定是自己平时习惯的硬件。

你可能感兴趣的:(STM32CubeMX学习笔记,stm32,嵌入式硬件,单片机)