26.3.8 ZD-EP37 [CubeMX/时钟树] CubeMX新建工程流程及F407时钟树的介绍

26.3.8 ZD-EP37 [CubeMX/时钟树] CubeMX新建工程流程及F407时钟树的介绍

1 时钟树简介

我们先简单介绍一下时钟树(基于STM32F407),先看简图(高速部分):

STM32F4时钟树简图(高速部分)(PLL为锁相环) (修正:HSE与HSI不都是晶振-晶体振荡器, HSI为RC振荡器,HSE可能为晶振也可能为陶瓷振荡器 因此此处应修正为外/内部高速振荡器)

可以看到外部晶振(探索者系列HSE频率为8MHz,F4系列HSI为16MHz)经分频和锁相环的倍频分频后为SYSCLK提供了一个稳定的高速频率,并(经分频后-可选)传递到总线部分,再经一系列分频操作传递给外设。

F1系列HSI默认直接进行二分频,目的是:满足 PLL 硬件输入规格兼容频率上限提升时钟稳定性而设计的强制逻辑,是底层硬件与时钟规划的最优解(由豆包生成)
AHB分频操作的目的:向下满足不同外设的硬件频率上限,向上匹配系统性能与功耗的平衡,同时兼顾总线协议兼容性和特殊外设(如定时器)的功能需求。(由豆包生成)
内部振荡器为RC振荡器,稳定性较差,使用外部振荡器可以得到更稳定的频率

下面再看低速部分:

F4时钟树低速部分简图
IWDG(Independent Watchdog)主要用于超时复位,在程序卡死时复位单片机

这里主要看RTC,RTC用于为系统提供精确的时间,因此在有外部振荡器的情况下优先选择外部振荡器(频率更稳定),若实在没有外部振荡器也可以使用内部振荡器替代。

看完简图我们最后过一遍原题图就开始进入CubeMX的部分:

STM32F4时钟树(其中APBx下支部分一般直接进行else x2)

2 CubeMX新建工程

先看大纲:

CubeMX新建工程部分大纲

2.1 工程初步建立

打开CubeMX,找到File->New Project,在MCU选项卡中输入对应芯片型号查找芯片,双击进入到配置界面即完成了工程初步建立。

芯片选择界面

2.2 时钟相关设置

首先是设置HSE和LSE,在配置界面左侧展开System Core,在列表中双击RCC,将HSE和LSE都设置为Crystal/Ceramic Resonator(晶体/陶瓷振荡器)对于下面的两个MCO(Master Clock Output1/2)设置,若工程有输出时钟的需求则勾选,本次范例中仅展示跑马灯,因此不做勾选。

时钟模块设置

之后来到配置界面上方Clock Configuration(时钟系统配置),参照我们前面的时钟树相关配置,我们可以完成如下设置:

时钟系统配置

对于上方的RTC部分,若要使用外部晶振,需要先在Pinout & Configuration选项卡中展开左侧的Timer,在RTC设置中勾选Activate Clock Source才能进行设置。

2.3 GPIO针脚设置

首先我们在原理图中知道,探索者的两个LED灯接入的针脚为PF9和PF10:

探索者原理图LED部分

之后在配置界面的芯片图部分找到这两个针脚,并将其与GPIO_Output对应

针脚选择

之后来到GPIO选项卡对两个针脚进行配置:

GPIO针脚配置

我们将output level修改为High(探索者中LED接的是3.3V的高电平,选择输出等级为High(即高电平),则LED两侧无电势差,默认为灭)。

探索者LED示意图

将GPIO mode改为Push Pull(默认即为此),此选项与另一选项Open Drain的解释见下:

特性推挽输出 (Push Pull)开漏输出 (Open Drain)
高电平驱动主动输出,直接到 VCC高阻态,需外部上拉
低电平驱动主动输出,直接到 GND主动输出,直接到 GND
驱动能力高电平驱动弱,取决于上拉电阻
线与逻辑不支持支持
电平转换不方便方便
典型应用LED、UART、SPII2C、电平转换

(由豆包生成)

下一个选项暂不做解释。

对于Maximum output speed(最大输出速度)选项,用于驱动LED选Low就足够了。

在User Label(用户标签)中,我们可以对这个针脚进行宏定义,将其命名为LED0/1以方便后续代码编写。

对两个针脚进行相同操作后即完成了GPIO的设置。

2.4 Cortex内核配置

直接看图吧,码字码的我好饿:

在SYS选项卡选择SWD调试模式
在NVIC(中断控制器)选项卡中选2这个,原因我也不知道后面会说

2.5 生成工程源码

看图吧:

Project Manager->Project选项卡设置
Code Generation选项卡选择 只拷贝必要的库文件

最后点击右上角GENERATE CODE开始生成初始化代码。

生成完成后即可在文件夹中找到工程文件。

2.6 编写用户程序

在Keil中打开工程文件,打开main.c文件,用户代码只可在下图中被BEGIN/END注释包围的部分编写,否则会被后续生成的初始化代码覆盖:

main.c用户代码可编写范围

3 结语

我好饿我要去吃麻辣烫了。

欢迎订阅 Subscribe to 沿江路右转Turn Right at Yanjiang Rd.

期待您的精彩评论 Looking forward to your wonderful comments.
[email protected]
订阅 Subscribe
赣ICP备2026002696号