STM32F4 | STM32CubeMX 图形配置工具

news2024/11/24 17:21:37

文章目录

    • 一、STM32CubeMX 简介
    • 二、STM32CubeMX 运行环境搭建
      • 1.Java环境安装
      • 2.STM32CubeMX 图形化工具安装
    • 三、使用 STM32CubeMX 工具配置工程模板
      • 1.工程初步建立和保存
      • 2.RCC 设置
      • 3.时钟系统(时钟树)配置
      • 4.GPIO 功能引脚配置
      • 5.生成工程源码
      • 6.编写用户程序

   stm32Cube 包含 2 个部分:一部分是嵌入式软件包(包括 HAL 库),另一部分是图形化配置工具 STM32CubeMX

一、STM32CubeMX 简介

  STM32CubeMX 是 ST 意法半导体近几年来大力推荐的 STM32 芯片图形化配置工具,允许用户使用图形化向导生成 C 初始化代码,可以大大减轻开发工作,时间和费用。STM32CubeMX几乎覆盖了 STM32 全系列芯片。它具有如下特性:

  • 直观的选择 MCU 型号,可指定系列、封装、外设数量等条件
  • 微控制器图形化配置
  • 自动处理引脚冲突
  • 动态设置时钟树,生成系统时钟配置代码
  • 可以动态设置外围和中间件模式和初始化
  • 功耗预测
  • C 代码工程生成器覆盖了STM32 微控制器初始化编译软件,如 IARKEILGCC
  • 可以独立使用或者作为 Eclipse 插件使用

  STM32CubeMXSTM32Cube 的关系:STM32Cube包含 STM32CubeMX 图形工具和 STM32Cube 库两个部分,使用 STM32CubeMX 配置生成的代码,是基于 STM32Cube 库的。也就是说,我们使用STM32CubeMX 配置出来的初始化代码和 STM32Cube 库兼容,例如:硬件抽象层代码就是使用的 STM32HAL 库。不同的 STM32 系列芯片,会有不同的 STM32Cube 库支持,而 STM32CubeMX 图形工具只有一种。所以我们配置不同的 STM32 系列芯片,选择不同的 STM32Cube 库即可。

二、STM32CubeMX 运行环境搭建

  STM32CubeMX 运行环境搭建包含两个部分:Java 运行环境安装与STM32CubeMX 软件安装。

1.Java环境安装

这里大家需要注意,STM32CubeMXJava 运行环境版本必须是 V1.7 及以上,如果你的电脑安装过 V1.7 以下版本,请先删掉后重新安装最新版本。

在这里插入图片描述
安装完 Java 运行环境之后,为了检测是否正常安装,我们可以打开 Windows 的命令输入框,输入:java –version 命令,如果显示 Java 版本信息,则安装成功。提示信息如下图所示:
在这里插入图片描述

2.STM32CubeMX 图形化工具安装

  双击 STM32CubeMX 安装包,根据提示信息安装即可。安装完成之后提示信息如下图所示:
在这里插入图片描述
安装完成之后,我们打开软件,如果软件安装成功,打开软件之后的界面如下图所示:
在这里插入图片描述
  在安装好 STM32CubeMX 之后,接下来我们要在软件中指定 STM32Cube 软件包。在STM32CubeMX 操作界面,依次点击 Help->Updater Settings,弹出界面如下图所示:
在这里插入图片描述

三、使用 STM32CubeMX 工具配置工程模板

  大多数情况下,我们都只使用STM32CubeMX 来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在 STM32CubeMX 中完成的,需要用户自己根据需求来实现。使用 STM32CubeMX 配置工程的一般步骤为:

  • 工程初步建立和保存
  • RCC 设置
  • 时钟系统(时钟树)配置
  • GPIO 功能引脚配置
  • 生成工程源码
  • 编写用户代码

1.工程初步建立和保存

  工程建立的方法有两种方法,第一种方法是打开 STM32CubeMX 之后在主界面点击 New Project 按钮,第二种方法是在菜单栏依次点击 File->New Project
在这里插入图片描述
点击新建工程按钮之后,会弹出 MCU 选择窗口。我们依次在选项卡 SeriesLinesPackage之下选择与我们使用的芯片 STM32F429IGT 对应的参数,然后选择对应的芯片型号,最后点击OK 按钮。操作方法如下图所示:
在这里插入图片描述
  为了避免在软件使用过程中出现意外导致工程没有保存,所以我们选择好芯片型号之后,先对工程进行保存。依次点击菜单栏 File->Save Project,然后保存工程到某个文件夹下面即可。操作过程如下图所示:
在这里插入图片描述
保存完成之后,进入Template 目录后发现目录中多了一个 Template.ioc 文件,下次我们点击这个文件就可以直接打开这个工程。
  工程新建好之后会直接进入 Pinout 选项卡,这个时候界面会展示芯片完整引脚图,如下图所示:
在这里插入图片描述

在引脚图中,我们可以对引脚功能进行配置。图中黄色的引脚主要是一些电源和 GND 引脚。如果某个引脚被使用,那么会显示为绿色。

2.RCC 设置

  对 STM32 芯片而言,RCC 配置的重要性不言而喻。在 STM32CubeMX 中,RCC 相关设置却非常简单,因为它把时钟系统独立出来配置。 在操作界面,依次点击选项卡Pinout->Peripherals->RCC 便可进入 RCC 配置栏,操作步骤如下图所示:
在这里插入图片描述
从上图可以看出,RCC 配置栏实际上只有 5 个配置项。选项 High Speed Clock(HSE)用来配置HSE,第二个选项 Low Speed Clock(LSE)用来配置 LSE,选项 Master Clock Output 1 用来选择是否使能 MCO1 引脚时钟输出,选项 Master Clock Output 2 用来选择是否使能 MCO2引脚时钟输出,最后一个选项 Audio Clock Input(I2S_CKIN)用来选择是否从 I2S_CKIN(PC9)输入I2S时钟。这里大家要注意,因为选项 Master Clock Output 2 和选项 Audio Clock Input(I2S_CKIN)都是使用的 PC9 引脚,所以如果我们使能了其中一个,那么另一个选项会自动显示为红色,也就是不允许配置,这就是 STM32CubeMX 的自动冲突检测功能。
  本小节我们只使用到 HSE,所以我们设置选项 High Speed Clock(HSE)的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)即可。这里还需要说明一下,值 Bypass ClockSource 的意思是旁路时钟源,也就是不使用使用晶振/陶瓷振荡器,直接通过外部提供一个可靠的 4-26MHz 时钟作为 HSE。配置好的 RCC 配置选项如下图所示:
在这里插入图片描述
从上图还可以看出,在我们打开了 HSE 之后,右边的引脚图中,相应的引脚会由灰色变为绿色,表示该引脚已经被使用。

3.时钟系统(时钟树)配置

  点击 Clock Configuration 选项卡即可进入时钟系统配置栏,如下图所示:
在这里插入图片描述
进入Clock Configuration配置栏之后可以看到,界面展现一个完整的STM32F429时钟系统框图。这个时钟系统框图跟我们之前时钟系统章节讲解的时钟系统框图实际是一模一样的,只不过调整了一下显示顺序。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
  这里,我们将配置一个和我们之前讲解的 Stm32_Clock_Init 函数实现的一模一样的配置。Stm32_Clock_Init 函数主要实现的是以 HSE 为时钟源,配置主 PLL 相关参数,然后系统时钟选择 PLL 为时钟源,最终配置系统时钟为 180MHz 的过程。同时,还配置了 AHBAPB1APB2Systick 的相关分频系数。由于图片比较大,我们把主要的配置部分分两部分来讲解,第一部分是配置系统时钟,第二部分是配置 AHBAPB1APB2 的分频系数。首先,我们来看看第一部分配置如下图所示:

在这里插入图片描述
  我们把系统时钟配置分为 6 个步骤,分别用标号1-6表示,详细过程为:

  1. 时钟源参数设置:HSE 或者 HSI 配置。这里我们选择 HSE 为时钟源,所以我们之前必须在 RCC 配置中我们开启 HSE。
  2. 时钟源选择:HSE 还是 HSI。这里我们配置选择器选择 HSE 即可。
  3. PLL 分频系数 M 配置。分频系数 M 我们设置为 25。
  4. PLL 倍频系数 N 配置。倍频系数 N 我们设置为 360。
  5. PLL 分频系数 P 配置。分频系数 P 我们配置为 2。
  6. 系统时钟时钟源选择:PLLHSI 还是 HSE。这里选择 PLL,选择器选PLLCLK 即可。

  经过上面的 6 个步骤,就会生成标准的 180MHz 系统时钟。接下来我们只需要配置 AHBAPB1APB2Systick 的分频系数,就可以完全实现函数 Stm32_Clock_Init 配置的时钟系统。配置如下图所示:
在这里插入图片描述
AHBAPB1APB2 总线时钟以及 Systick 时钟的最终来源都是系统时钟 SYSCLK。其中AHB 总线时钟 HCLK 是由 SYSCLK 经过 AHB 预分频器之后的来,如果我们要设置 HCLK180MHz,那么我们只需要配置图中标号⑦的地方为 1 即可。得到 HCLK 之后,接下来我们将在图标号⑧~⑩处同样的方法依次配置 SystickAPB 以及 APB2 分频系数分别为 1,4 和 2 即可。配置完成之后,那么 HCLK=180MHZSystick 时钟为 180/1MHz=180MHzPCLK1=180MHz/4=45MHzPCLK2=180MHz/2=90MHz,这和我们使用 Stm32_Clock_Init 函数配置的时钟是一模一样的。

4.GPIO 功能引脚配置

  那么,怎么使用 STM32CubeMX 工具配置 STM32GPIO 口。在阿波罗STM32F429 开发板的 PB0PB1 引脚有连接两个 LED 灯,本小节将配置这两个 IO 口的相关参数。STM32CubeMX 可以直接在芯片引脚图上配置 IO 口参数。这里我们回到STM32CubeMXPinout选项,在搜索栏输入PB0PB1即可找到PB0PB1在引脚图中的位置如下图所示:
在这里插入图片描述
接下来,我们在上图引脚图中点击 PB0,在弹出的下拉菜单中,选择 IO 口的功能为 GPIO_Output。操作方法如下图所示:
在这里插入图片描述
同样的方法,我们配置 PB1 选择功能为 GPIO_Oput 即可。这里我们需要说明一下,如果我们要配置 IO 口为外部中断引脚或者其他复用功能,我们选择相应的选项即可。配置完 IO 口功能之后,还要配置 IO 口的速度,上下拉等参数。这些参数是在 Configuration 选项卡中配置的。配置步骤如下图所示:
在这里插入图片描述

GPIO output level:有low和high两种选择,一般选择low
GPIO mode:推挽输出和开漏输出两者模式,两者模式的区别在于推 挽输出中1代表VCC,0表示GND;开漏输出中1代表高阻态,0代表GND。
GPIO Pull-up/Pull-down:输入需要上下拉,输出一般没有上下拉
Maxinum output speed:最大的输出速度,一般选择low就可以了。

配置完成后即可。

5.生成工程源码

  经过上面 4 个步骤,一个完整的系统已经配置完成。接下来,我们将使用 STM32CubeMX生成我们需要的工程源码。在 STM32CubeMX 操作界面,选择Project Manager,操作方法如下图所示:
在这里插入图片描述

设置工程名字,并且Toolchain/IDE选择MDK-ARMVersion选择V5。选择GENERATE CODE,就会生成相应的代码。
  源码生产完成之后,就保存在我们 Project Location 选项配置的目录中,同时弹出生成成功提示界面,我们可以点击界面的“Open Folder”按钮打开工程保存目录,也可以点击界面的“Open Project”按钮直接使用 KEIL5 打开工程。提示界面如下图所示:
在这里插入图片描述
至此,一个完整的 STM32F429 工程就已经生成完成。生产后的工程目录结构如下图所示:
在这里插入图片描述

  • Drivers 文件夹存放的是 HAL 库文件和 CMSIS 相关文件。
  • Inc 文件夹存放的是工程必须的部分头文件。
  • MDK-ARM 下面存放的是 MDK 工程文件。
  • Src 文件夹下面存放的是工程必须的部分源文件。
  • Template.iocSTM32CubeMX 工程文件,双击该文件工程就会在 STM32CubeMX 中被打开。

6.编写用户程序

  在编写用户程序之前,首先我们打开生成的工程模板进行编译,发现没有任何错误和警告。工程模板结构如下图所示:
在这里插入图片描述
  我们直接打开 main.c 源文件可以看到,该文件定义了两个关键函数 SystemClock_ConfigMX_GPIO_Init,并且在 main 函数中调用了这两个函数。SystemClock_Config 函数用来配置时钟系统,和我们模板中的 Stm32_Clock_Init函数作用一样。MX_GPIO_Init 函数用来初始化 PB0PB1 相关配置,这在我们的模板中,我们直接放在 main 函数中。接下来我们看看生成的工程模板的 main 函数,这里我们删掉了源码
注释,关键源码如下:

int main(void)
{
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	while (1)
	{
	}
}

while语句中添加跑马灯实验核心代码,

/* USER CODE BEGIN 0 */
void Delay(__IO uint32_t nCount);
void Delay(__IO uint32_t nCount)
{
 while(nCount--){}
}
/* USER CODE END 0 */
int main(void)
{
	 HAL_Init();
	 SystemClock_Config();
	 MX_GPIO_Init();
/* USER CODE BEGIN WHILE */
 while (1)
 {
	 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB1 置 1 
	 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB0 置 1 
	 Delay(0x7FFFFF);
	 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //PB1 置 0
	 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //PB0 置 0 
	 Delay(0x7FFFFF);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
 }
 /* USER CODE END 3 */
}

这个时候,我们对工程进行编译,发现没有任何警告和错误。下载程序到阿波罗 STM32F429 开发板上,LED1与LED2循环闪烁。

  • 这里我们需要说明一下,大多数情况下,我们使用 STM32CubeMX 主要用来配置时钟系统和外设初始化代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车行业:充分借力数据价值,推动数字化营销链路闭环

当下,汽车行业已慢慢由曾经的增量市场逐步转变为存量市场。更年轻的消费群体偏好、更精准智能的营销投放策略和强势入局的新能源汽车等因素都在推动着汽车行业的不断发展。对于汽车厂商和垂域媒体来说,进行丰富的人群洞察与用户分层,能挖掘更…

陪诊服务系统源码,可以在线预约陪诊师的软件平台

随着生活方式受互联网的影响,我们的各方面都变得更加便利,也伴随着我国人口老龄化,大部分年轻人都选择了外出打工,背井离乡,从而没有办法待在父母身边照顾,陪诊师就是在这个大背景下诞生了,陪诊…

班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板下载 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

LeetCode刷题复盘笔记—一文搞懂动态规划之121. 买卖股票的最佳时机问题(动态规划系列第二十篇)

今日主要总结一下动态规划的一道题目,121. 买卖股票的最佳时机 题目:121. 买卖股票的最佳时机 Leetcode题目地址 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一…

QML入门教程:QML和QtQuick简介以及QML实例

从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。…

激光焊接3系铝合金的工艺分析

随着汽车行业的不断壮大,纯电动汽车和燃料电池汽车将共同主导中国新能源汽车市场的未来发展。电动车轻量化和燃料电池的大量使用,必然涉及到越来越多的铝合金焊接工艺。铝合金具有良好的物理、化学和机械性能,是工业生产中一种重要的轻金属材…

搜索引擎搜索特定网站的方法 :site

前言 从13开始的贴吧时代,还记得当时在贴吧里要搜索某些特定的帖子或者关键字的时候,用的都是“吧内搜索”,但用过的人都知道,这个所谓的吧内搜索其实很难用,大家都是用关键字空格贴吧之类的办法去搜索相关的内容。我…

2025年350万辆市场空间!舱驾一体「抢」行泊/舱泊风头

过去三年是汽车智能化「细分作战」阶段,无论是智能驾驶还是智能座舱,由于品牌、车型定位不同,导致在不同价位区间、不同品牌、不同车型,舱内舱外智能化功能组合并不一致。 而随着跨域融合、中央计算平台带动汽车行业进入新的增长…

《树莓派项目实战》第九节 使用PCF8591模块和光敏电阻传感器测量光照强度

目录 8.1 PCF8691模块引脚介绍 8.2 工作原理 8.3 开启I2C接口 8.4 连接到树莓派 8.5 编写代码测量光照强度 在上一节我们使用光敏电阻传感器检测了环境中的光照是否达到了设定的阈值。在本节,我们将使用PCF8591模块和光敏电阻度传感器测量环境中光照强度的具体…

Continua CI捆绑的PostgreSQL数据库服务

Continua CI捆绑的PostgreSQL数据库服务 捆绑的PostgreSQL数据库服务已升级到15.1版。 现在可以使用表达式和变量在“配置存储库分支映射”对话框中为每个存储库指定默认分支。 在“停止”操作中添加了“将失败视为错误”选项。如果选中此项并且该操作位于“Try”块内&#xff…

Qt 模型视图编程之可编辑数据模型

背景 Qt 模型视图编程中模型定义了标准接口对数据进行访问,可根据需求继承对应的抽象模型类来实现自定义的数据模型。一个基本的数据模型至少要实现以下虚函数: ①.rowCount:行数,返回要显示多少行; ②&…

SpringBoot+Vue实现在线电子小说网站

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

伙伴福利,100个项目彻底精通Java!【开源】

为了帮助更多的小伙伴,快速成长进步,冲进大厂中厂,我分享了很多的项目哟,例如: java项目精品实战案例 | JavaSwing实战项目 但很多小伙伴,还觉得不够,好吧!今天就拿出压箱底的项目…

CPU工作原理概述

为了了解CPU的完整工作过程,我们需要知道两件事,第一,CPU是如何获取到数据或者指令的;第二,CPU是如何执行指令的。 目录 一、CPU和内存的交互方式 1、地址空间的概念 2、CPU的取值过程 二、CPU内部的执行过程 1、…

OceanBase-安装

文章目录部署规划机器准备统一配置hosts设置设置机器名和静态ip关闭大页配置信息查看时钟源ntp配置(需要所有机器root)磁盘规划创建用户配置limits.conf配置sysctl.conf关闭防火墙关闭SELinux克隆虚拟机差异化配置中控机设置无密码SSH登录目标机器时钟源…

【推送位置苹果群发iMessage推】如果Windows和Linux实现不同的传输层协议,那末因为数据格式的不同

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

Qt-Web混合开发-QWebEngineView加载网页最小示例(2)

Qt-Web混合开发-QWebEngineView加载网页最小示例 2🌍 文章目录Qt-Web混合开发-QWebEngineView加载网页最小示例 2🌍1、概述🌐2、实现效果🧭3、实现功能🚅4、关键代码🚚5、源代码🚀更多精彩内容&…

高斯定理的理解——工程电磁场 P2~P5

证明:静电场是无旋场 根据斯托克斯公式上式等于 电位的引入 由于静电场是无源场,我们可以得到 又因为 再结合电场的物理意义,我们可以定义 功函数表达式的化简 原先功函数表达式 高斯定律的理解 不管是导体还是电解质,对于电…

【图像处理】FAST、BRIEF、ORB算法原理

整理FAST、BRIEF、ORB算法的原理。 FAST算法 一、FAST简介 FAST(features from accelerated segment test)是一种角点检测算法,可以用于提取特征点,后来也长用于目标跟踪等计算机视觉任务中。FAST角点检测算法最初由 Edward Ro…

LL(1)文法分析程序

一、实验目的 设计一个非递归预测分析器,实现对表达式语言的分析,理解自上而下语法 分析方法的基本思想,掌握设计LL()文法分析程序设计的基本原理和方法。 根据给定LL(1)分析表,输入…