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

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


目录


前言

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


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

标准函数库目前已经不是主流了,但是有些老的项目移植会用

函数库的.h文件只要将.C下展开就可以找到

1、stm32f10x.h修改HSE_VALUE

将原来的HSE_VALUE值修改为
#define HSE_VALUE ((uint32_t)16000000)

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

注意这里是.C文件,16MHz需要先2分频,修改为

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

在之上的修改位置更改为以下代码

在.h文件加入以下宏配置

javascript 复制代码
// <h> 晶振源配置
// <8000000=> 8MHz外部晶振
// <12000000=> 12MHz外部晶振
// <16000000=> 16MHz外部晶振
#ifndef EXT_OSC_SOURCE
#define EXT_OSC_SOURCE 16000000
#endif

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

javascript 复制代码
#define HSE_VALUE    ((uint32_t)EXT_OSC_SOURCE) /*!< Value of the External oscillator in Hz */

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

javascript 复制代码
#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

二、修改Hal函数库的方法

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

1.stm32f4xx_hal_conf.h修改HSE_VALUE

将原来的HSE_VALUE值修改为
#define HSE_VALUE 16000000U

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

我这里使用正点原子的函数,可以看到用的是x9,我们用16Mz只需要使用x4

修改后

这里是直接调用函数大致的调整了下,需要非常精确需要在HAL_RCC_OscConfig中设置参数


小记:

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

相关推荐
江山如画,佳人北望13 分钟前
stm32-c8t6实现语音识别(LD3320)
stm32·单片机·嵌入式硬件
baowxz25 分钟前
航芯MCU使用IAR+Jlink调试
单片机·嵌入式硬件
wangxinwei200026 分钟前
stm32_LAN8720驱动
stm32·单片机·嵌入式硬件
大叔带刺29 分钟前
AUTOSAR实战教程--DoIP_01_配置项解释
单片机·嵌入式硬件
小胖同学~1 小时前
Linux--vsFTP配置篇
stm32·单片机·嵌入式硬件
小智学长 | 嵌入式2 小时前
SOC-ESP32S3部分:36-适配自己的板卡
单片机·物联网·esp32
Neil今天也要学习4 小时前
永磁同步电机参数辨识算法--IPMSM拓展卡尔曼滤波全参数辨识
单片机·嵌入式硬件·算法
知识噬元兽8 小时前
【工具使用】STM32CubeMX-FreeRTOS操作系统-信号标志、互斥锁、信号量篇
stm32·单片机·嵌入式硬件
Flag- L9 小时前
STM32标准库-TIM定时器
stm32·单片机·嵌入式硬件
2301_775602389 小时前
STM32什么是寄存器
stm32·单片机·嵌入式硬件