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

STM32F4系列单片机如何修改主频

引言

在嵌入式系统开发中,STM32F4系列单片机的主频设置至关重要,它直接影响着系统的运行效率和性能表现。本文将为读者详细解析如何修改STM32F4系列单片机的主频。

F1与F4系列的区别

我首先想到最大的区别就是主频不同,什么是主频,我的理解就是CPU运行的频率,频率越大,性能肯定越强,F1系列单片机的主频大多数都是72Mhz,而F4系列单片机的主频却来到了惊人的168Mhz,什么概念?比F1的2倍还有多。所以刚刚从F1转到F4的朋友肯定会这么想,不就是主频提高了吗,把F1系列的代码移植管理不就行了吗。刚开始我也是这样想,也确实,除了配置方式不同意外,其它都大差不差。但当用上通信协议(软件模拟iic)的时候就发现,照搬F1系列的代码到F4系列上根本就行不通。其原因就在于F1与F4系列的主频不同,F4响应速度远超F1,所以要想成功移植须在基础上加延时,这里不作过多论述。总之,F1与F4系列的区别有很多方面,本文章只讲主频方面的不同。

修改F4主频

首先要想修改主频,就得先了解STM32单片机的时钟树,没了解过的朋友建议先去了解一下。

HAL库版本

这是我从STM32CUBEMX截下来的,我们都知道,大多数STM32单片机外接的大多数都8Mhz的晶振,所以HSE左边的蓝色方框里的数值改为8,代表着外接8Mhz的晶振。然后到PLL Source Mux(PLL时钟源选择器),依然选择HSE(外部高速时钟),接着我们看到有 /M, *N 和 /P。

/M全称 PLL_M,它是一个分频因子,用于对输入的时钟进行分频,就是除法操作,其取值范围通常为:2-63

*N全称PLL_N,它是一个倍频因子,用于将经过PLL_M分频后的频率进行乘法操作,其取值范围通常为:50-432

/P全称PLL_P,它是一个分频因子,用于将经过PLL_N倍频后的频率进行除法操作,其取值范围通常为:2-8(偶数倍)

对上面进行倍频分频操作后,进入到system clock mux(系统时钟源选择),我们选择PLLCLK,通过相位锁环倍频分频得到的时钟作为系统时钟。最后到AHB Prescaler(AHB总线分频器),经过这个分频后的HCLK(AHB时钟),用于驱动CPU和所有挂载在AHB总线上的外设。可以说,HCLK的频率直接影响着CPU的运行速度和AHB总线上外设的性能。所以最后这个AHB Prescaler我们通常选择1分频,也就是不分频。下面是结果图:

再往后的大家可以按需倍频分频。

标准库版本

首先查看自己用的是什么版本的系统文件

可以看到使用的是STM32F40_41xxx,记下这个版本号,等会需要用到。

先说一下#if和#endif预处理函数,它的功能是根据某些条件来决定是否编译特定的代码。

我在上图中已经定义了STM32F40_41xxx,所以它就会执行#if和#endif里面的代码

就比如这样

#if defined(STM32F40_41xxx)
uint32_t SystemCoreClock = 168000000;
#endif /* STM32F40_41xxx */

因为#if后面定义的是STM32F40_41xxx,所以我就执行里面的代码

接着打开system _stm32f4xx.c这个C文件,找到#define HSE_BYPASS_INPUT_FREQUENCY   25000000,把250000000改成80000000,这个是HSE外部高速晶振的数值,如果不是8Mhz,可以按需修改。

接着我们找到PLL_M,PLL_N,PLL_P。然后按需修改自己需要的主频即可。

在static void SetSysClock(void)函数中,可以看到它们的分频倍频过程,如果不确定的,可以自己调试一下代码,看一下有没有按照预定的路线编译。

总结

本文只是个人看法,如有不足,欢迎指出,谢谢!

http://www.dtcms.com/a/357786.html

相关文章:

  • 从世界人形机器人大会看人形机器人如何实现复杂人类动作的精准复现?
  • 【论文简读】MuGS
  • 【拍摄学习记录】05-对焦、虚化、景深
  • 2025年06月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Golang 面试题「中级」
  • 四旋翼飞行器动力学建模与简单PID控制
  • 锂电池充电芯片 XSP30支持PD/QC等多种快充协议支持最大充电电流2A
  • 嵌入式Linux驱动开发:i.MX6ULL平台设备驱动
  • 第22章笔记|把“可传参脚本”打磨成“高级好用的工具”
  • 博客系统测试实战:功能和性能的全面解析
  • selenium自动下载更新浏览器对应的webdriver
  • 关于shell命令的扩展
  • log4jshell CVE-2021-44228 复现
  • R1 快开门式压力容器操作证考试大纲解读:重点模块与考核标准
  • Linux Shell 编程
  • 淘宝商品评论接口技术实现:从评论获取到情感分析全流程方案
  • SQL知识
  • 序列容器(vector,deque,list)
  • 4x12G-SDI(四链接12G-SDI)
  • PCIe 6.0 TLP结构解析:深入理解事务层数据包的设计与实现
  • Windows Command Line Windows 命令行
  • 【RAG Agent实战】告别“单线程”RAG:用查询理解与LangGraph构建能处理复杂意图的高级代理
  • ros2--action/动作--接口
  • 2024年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 中科米堆CASAIM五金配件三维扫描测量尺寸形位公差
  • MySQL 中如果发生死锁应该如何解决?
  • OpenAI宣布正式推出Realtime API
  • ADC模数转换
  • Set和Map
  • AI的“科学革命”:Karpathy吹响号角,从“经院哲学”走向“实验科学”