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芯片基本都是这样修改晶振的,也提醒了我在写程序前要检查下硬件的外部晶振,不一定是自己平时习惯的硬件。

相关推荐
雾削木2 小时前
stm32解锁芯片
javascript·stm32·单片机·嵌入式硬件·gitee
热爱编程的小刘3 小时前
STM32学习路线开启篇:外部中断
stm32
璞致电子4 小时前
fpga开发板ZYNQ 璞致 PZ7010/7020 邮票孔核心板简介-ZYNQ7000系列小系统学习板
linux·嵌入式硬件·学习·fpga开发·fpga·fpga开发板·xilinx开发板
三佛科技-134163842124 小时前
手持小风扇MCU方案,智能风扇方案设计开发
单片机·嵌入式硬件
btzhy4 小时前
STM32单片机:基本定时器应用:PWM 生成(STM32L4xx)
stm32·单片机·嵌入式硬件·基本定时器应用:pwm生成
guangshui5164 小时前
18006.STM32通过SPI读取LAN9253数据
stm32·单片机·嵌入式硬件
小莞尔6 小时前
【51单片机】【protues仿真】基于51单片机全自动洗衣机系统
c语言·单片机·嵌入式硬件·物联网·51单片机
hazy1k7 小时前
51单片机基础-静态数码管显示
stm32·单片机·嵌入式硬件·51单片机
bu_shuo8 小时前
单片机中经常定义的结构体解读
单片机·嵌入式硬件
00后程序员张8 小时前
Windows 安全分割利器:strtok_s () 详解
windows·单片机·安全