STM32F407的时钟配置

本文详细介绍了STM32F4系列微控制器的时钟系统,包括HSI、HSE和PLL三种时钟源。重点讲解了如何使用HSE作为外部输入,通过PLL进行倍频,以达到系统所需的168MHz频率。同时,提供了具体的参数设置和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有3种时钟,

HSI,High Speed Internal,默认是这个

HSE,High Speed External,用外置晶振,官方开发板默认晶振为25MHz,stm32f4xx.h中有定义HSE_VALUE为25MHz,启明为8MHz

PLL,内部锁相环,可以有输出,输入可以为HSI或HSE。

一般都用HSE作为外部输入,然后HSE输入给PLL进行倍频,PLL输出给系统时钟。

 

system_stm32f4xx.c文件中有SystemCoreClockUpdate,该函数可以更新系统时钟全局变量SystemCoreClock。

 

 

 1 /*     Redefine HSE_VALUE to 8MHz 
 2     QiMing board osc     = 8 MHz, 
 3     Official board osc     = 24 MHz
 4 */
 5 #undef HSE_VALUE
 6 #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
 7 
 8 
 9 /************************* PLL Parameters *************************************/
10 /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
11 //#define PLL_M      25
12 //#define PLL_N      336
13 /*     The following para N/M = 42, 
14     The above para N/M = 13.44 
15     25 MHz / 8 MHz = 3.125
16     13.44*3.125 = 42
17     So, make sure N/M = 42 can make 168 MHz
18 */
19 #define PLL_M      5
20 #define PLL_N      210

 

 

转载于:https://www.cnblogs.com/yanhc/p/9978554.html

### STM32F407时钟配置方法 #### 配置概述 STM32CubeMX 是一款功能强大的图形化工具,能够简化基于STM32微控制器的开发过程。对于STM32F407系列芯片而言,在“Clock Configuration”选项卡中可以完成系统时钟和外设时钟的频率设定[^1]。 当进入该界面后,可以通过调整PLL(Phase-Locked Loop)、AHB/APB总线分频器以及内部/外部晶振参数来实现目标工作频率的设置。这些操作会直接影响到MCU性能表现及其功耗水平[^2]。 #### 外部高速与时钟源选择 针对高性能需求的应用场景下,推荐启用HSE(External High Speed Oscillator),它提供了更加精确稳定的基准信号给整个系统的运行提供保障;而对于一些特定的功能模块比如RTC(real time counter),则需要用到LSE(Low-speed external oscillator)作为其独立供电下的计时依据,一般固定为32.768KHz[^3]. #### 主要步骤说明如下: - **启动项目并选定设备型号** 打开STM32CubeMX软件之后新建工程文件,并从中挑选出对应的目标器件——即这里所讨论的对象STM32F407VE/VET/E/Z/N/G/B/C/D/W/R/P/T/U/Y/M/L/K/J/H/F/E-DISCO板子之一版本号即可满足要求. - **访问时钟树结构编辑页面** 完成上述基本初始化动作以后,“Pinout & Configuration”标签页里找到 “Clock Configuration”,点击进去就能看到详细的时钟架构图解视窗呈现出来供进一步定制修改之用了。 - **定义核心处理器速度及其他关联参数** 根据实际应用场景的不同考量因素综合权衡决定最终数值大小范围内的合理取舍方案。例如常见的 Cortex-M4 内核最高可达 168 MHz 的主频限制条件下进行优化处理得到最佳平衡点位置处停止迭代计算流程直至达到预期效果为止。 下面给出一段简单的C语言代码片段展示如何读取当前系统时钟值: ```c #include "stm32f4xx_hal.h" uint32_t GetSysClockFreq(void){ return HAL_RCC_GetSysClockFreq(); } ``` 此函数利用HAL库封装好的API接口调用来获取实时更新后的全局变量存储地址指向的内容返回给调用者继续后续逻辑运算分析判断分支走向等等用途广泛适用性强兼容性好易于维护扩展升级等功能特性兼具一身值得信赖长期合作共谋发展大业! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值