当前位置: 首页 > article >正文

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

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

第一步:

下面的代码意思是:

#if !defined (HSE_VALUE)
  • 检查 HSE_VALUE 是否已经被定义
  • 如果在代码的其他地方(如 Makefile、编译器选项或头文件)已经定义了 HSE_VALUE,则不会重复定义。
#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
#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,确定保存


http://www.kler.cn/a/572041.html

相关文章:

  • 【音视频】视频基本概念
  • idea实现热部署
  • 计算机网络基础:文件共享服务器(注册表更改)
  • 【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解
  • GAN、Diffusion与美颜SDK:AI如何驱动人脸美型API进化?
  • 【菜笔cf刷题日常-1600】C. Binary String(二分求min/max)
  • 力扣977.有序数组的平方(双指针)
  • 软考中级-数据库-3.2 数据结构-数组和矩阵
  • 安当全栈式PostgreSQL数据库安全解决方案:透明加密、动态凭据与勒索防护一体化实践
  • 制造业中的“大数据”:如何实现精准决策?
  • 重生之我在异世界学编程之C语言:深入预处理篇(上)
  • 千峰React:案例二
  • 【每日学点HarmonyOS Next知识】getContext问题、清除Web缓存、弹层的点击事件透传、去除间隙、侧滑菜单设置
  • 【C++】为什么C++的构造函数不能为虚函数,折钩函数可以为虚函数
  • ChatVLA:基于视觉-语言-动作模型的统一多模态理解与机器人控制
  • python和pycharm安装教程
  • 云服数据存储接口:CloudSever
  • JavaEE_多线程(一)
  • C++中的无锁编程
  • Python Cookbook-3.1 计算昨天和明天的日期