如果STM32板子上晶振不是8MHz而是其他(如12MHz)怎么办?

如果你板子的晶振不是8MHz,假如是12MHz怎么办呢?

第一步:

下面的代码意思是:

cpp 复制代码
#if !defined (HSE_VALUE)
  • 检查 HSE_VALUE 是否已经被定义
  • 如果在代码的其他地方(如 Makefile、编译器选项或头文件)已经定义了 HSE_VALUE,则不会重复定义。
cpp 复制代码
#if defined(USE_STM3210C_EVAL)

#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */
  • 如果宏 USE_STM3210C_EVAL 被定义 ,说明当前使用的是 STM3210C-EVAL 评估板(但是一般不是ST公司的开发板所以这一条可以忽略) ,则 HSE_VALUE 设为 25MHz(25000000U) ,因为这个开发板上的 HSE 晶振是 25MHz
cpp 复制代码
#else

#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */

#endif
  • 如果 USE_STM3210C_EVAL 没有被定义 ,则 HSE_VALUE 设为 8MHz(8000000U),这是大多数 STM32 默认使用的 HSE 频率。
  • 结束 #if !defined (HSE_VALUE),确保 如果 HSE_VALUE 已经定义,则不会覆盖

直接在main函数写上#define HSE_VALUE 12000000U即可

第二步:

打开system_stm32f10x.c,修改PLL参数,将

复制代码
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);

修改为:(把PLL9倍频改为6倍频)

复制代码
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);

我这个属于直接改系统初始配置

当然了这里你也可以用HAL_RCC_OscConfig函数来配置(这个可能更好因为移植性好)

第三步

至此,原文件已经修改完成,如果你想将主频修改至其他频率,请自行修改。

但是,到现在,如果您直接编译调试的话,就会出现上文所说的USART的波特率不正确,Systick走时不准等问题,原因就是我们需要进行第三部的修改,这个修改不是在原文件中,而是在编译环境中。我们已Keil MDK为例说明。

打开你已经建立的STM32工程,选择Projects-〉Options for target,找到Target标签,你会发现,外接的晶振默认还是8MHz,我们将外接的晶振参数修改为12MHz,确定保存

相关推荐
CODECOLLECT3 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen3 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
程序员良许5 小时前
三极管推挽输出电路分析
后端·嵌入式
嵌入小生0076 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
全栈游侠6 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
深圳市九鼎创展科技8 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计8 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
jllllyuz9 小时前
针对酒店KTV声控DMX512灯光系统的节目选择与实现
嵌入式
風清掦10 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报10 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机