STM32之CubeMX图形化工具开发介绍(十七)

news2025/1/21 12:24:51

STM32F407 系列文章 - STM32CubeMX(十七)


目录

前言

一、CubeMX

二、下载安装

1.下载

2.安装

3.图解步骤

三、用户界面

1.项目配置

2.项目生成

3.项目文件解释

4.新建工程

5.查看原工程

四、FAQ

总结


前言

STMCube源自意法半导体,旨在通过减少开发工作量、时间和成本,从而最大限度地复用软件并缩短创建目标系统的时间,让开发人员的生活更轻松。STM32CubeMX支持32位基于ARM Cortex的微控制器,涵盖了整个STM32产品。STM32CubeMX图形软件配置工具主要功能包括:可通过图形向导生成初始化C代码;提供STM32Cube HAL嵌入式代码库,确保在STM32各个产品之间实现最大限度的可移植性;底层API(LL)提供了一个专家级的快速轻量级层,它比HAL更靠近硬件;一套一致的第三方中间件比如RTOS、FatFs、USB、TCP/IP、图形库;提供了一套完整示例以及嵌入式软件工具。


一、CubeMX

CubeMX图形界面具备以下特性和功能:

  1. CubeMX可创建、保存和加载先前保存的项目。当启动CubeMX时,用户可以选择创建新项目或加载先前保存的项目,项目保存操作可将项目内执行的用户设置和配置保存在.ioc文件中,在STM32CubeMX下次加载项目时便可使用该文件。
  2. 轻松选择MCU和STMicroelectronics板。在开始新项目时,会打开一个专用窗口,用户可从STM32产品中选择微控制器或STMicroelectronics板,提供不同的筛选选项,以简化MCU和开发板选择。

  3. 轻松执行引脚布局配置。在“引脚布局”视图中,用户可以从列表中选择外设,并配置应用程序所需的外设模式、及相应的引脚进行分配和配置。对高级用户而言还可以使用“芯片”视图,直接将外设功能映射到物理引脚。在配置过程中,信号可以锁定在引脚上,CubeMX能检测引脚冲突和无效设置,并使用有意义的图标和有用的工具提示突出显示这些冲突和设置。另外配置完后引脚布局后,可以导出为.csv文件进行查看。

  4. 完整的项目生成。项目生成包括一组IDE的引脚布局、固件和中间件初始化C代码。用户可以从先前定义的引脚布局开始,继续配置中间件、时钟树、服务(RNG、CRC等)和外设参数。生成项目后,项目目录中包括生成的main.c文件和用于配置和初始化的C头文件、必要的HAL和中间件库的副本,以及用于所选IDE的特定文件。CubeMX C代码生成流程概述如下图所示。

  5. 添加用户自定义代码。用户可以在用户专用文件夹中添加用户定义的C代码,从而修改生成的源文件,CubeMX确保在下一次C代码生成时保留用户C代码(如果用户C代码不再与当前配置相关,则对其添加注释)。CubeMX也可以通过使用用户定义的freemarker .ftl模板文件生成用户文件。

  6. 时钟树配置。CubeMX提供了时钟树的图示,可以参阅设备参考手册。用户可以更改默认设置 (时钟源、预分频器和频率值),然后相应地更新时钟树。

  7. 功耗计算。用户可以首先选择微控制器料号和电池类型,进而定义表示应用生命周期和参数的一系列步骤(频率选择、使能的外设、步长持续时间),CubeMX功耗计算器返回相应的功耗和电池寿命估算值。

  8. 报告生成。可以生成.pdf和.csv报告,用于记录用户配置工作。

图形化开发工具STM32CubeMX,它具有以下优缺点。

优点:

  1. 快速开始:使用STM32CubeMX可以快速设置硬件,例如时钟设置、外设配置和中断优先级,从而缩短开发时间。

  2. 代码生成:STM32CubeMX可以生成整个项目框架,包括启动文件和中间件库,减少了开发者的工作量。

  3. 兼容性好:STM32CubeMX支持多种STM32设备,包括最新的STM32H7系列。

  4. 明确需求:客户可以快速识别最符合其要求的MCU(核心架构、特性、存储器容量、性能......),开发板设计人员可以关注如何针对板布局优化微控制器引脚配置并满足应用要求,嵌入式系统开发人员更感兴趣的是为特定目标设备开发新应用,以及将现有设计迁移至不同的微控制器。

缺点:

  1. 学习曲线:虽然STM32CubeMX简化了开发,但它需要一些时间来学习如何使用它。

  2. 可能的配置限制:有时候,由于自动生成的配置不能满足特定需求,可能需要手动修改生成代码。

  3. 依赖性:使用STM32CubeMX需要安装相应的软件包和插件。

CubeMX图形界面进行软件开发时,可以帮助开发者快速开始项目,减少代码编写工作。然而,它也要求开发者理解底层硬件和配置细节,以便在需要时进行调整和优化。

二、下载安装

STM32CubeMX软件支持win7、win8、win10的操作系统,32/64位都行。

1.下载

登录官方网站STM32CubeMX - 意法半导体STMicroelectronics,点击下载STM32CubeMX,可以选择Window、Mac、Linux,也可以查找早期的软件版本,自己根据需求进行下载即可,如下所示。

这里博主软件固件开发包选择的是stm32cubef4_v1.25.0版本的,CubeMX软件选择的是stm32cubemx_v6.0.1版本的,安装CubeMX6.0.1软件软件时,请先安装Java环境jdk-8u261-windows-x64。

2.安装

从上面官方网站上下载STM32CubeMX安装包后,将整个软件包解压到同一目录,并确保您拥有管理员权限后,双击SetupSTM32CubeMX-6.0.1.exe文件,启动安装向导。在Windows上成功安装STM32CubeMX后,桌面上会显示STM32CubeMX图标,可以在“程序”菜单中找到STM32CubeMX应用程序。STM32CubeMX.ioc文件显示为立方体图标,双击这些文件,使用STM32CubeMX打开文件。注意:在安装STM32CubeMX前,请先安装如果Java环境,并安装适当版本的Java运行时环境(版本1.7_45或更高版本)。

3.图解步骤

CubeMX具体安装步骤这里不作讲解,可以参考STM32 - CubeMX 安装图解 - CSDN博客这篇博文,每一步操作都有,适合初学者。

三、用户界面

STM32CubeMX用户界面包含以下内容:一、一个欢迎页面,用户可以在该页面决定启动一个新项目或加载一个近期项目;二、一个新项目窗口,用户应在该窗口中选择要用于项目的开发板或微控制器料号;三、项目视图及其主窗口、菜单栏、工具栏、四个配置视图(引脚布局、配置、时钟配置、功耗计算器)和一组帮助窗口(MCU选择、更新管理器、关于)。

新项目:此快捷方式通过打开“新项目”窗口来启动STM32CubeMX新项目创建(从“MCU选 择器”选项卡中选择MCU或从“板选择器”选项卡中选择板配置)。

加载项目:此快捷方式打开一个浏览器窗口,用于选择并加载先前保存的配置(.ioc文件)。加载使用旧STM32CubeMX版本创建的项目时,用户可以选择迁移,以将其迁移到最新的CubeMX可用数据库和STM32Cube固件版本,也可以选择继续。

帮助:此快捷方式可打开用户手册。

1.项目配置

在CubeMX主用户界面上开发设计者可以进行软件开发,完成软件引脚、时钟、外设、中断优先级、RCC、SYS等等配置,详细设置方法参考《STM32CubeMX使用手册.pdf》,在文末链接处可以下载阅读,该手册会有如下介绍,参考目录。

     

2.项目生成

在C代码生成过程中,STM32Cube代码默认采用HAL库驱动生成程序。

它从固件包以及Drivers/CMSIS、Drivers/STM32F4_HAL_Driver文件夹和中间件文件夹中(如果选择了中间件)的相关文件中复制。

它生成与用户MCU配置相对应的初始化C代码(.c/.h文件),并将其存储在Inc和Src文件夹中。默认情况下,包含以下文件:

  1. stm32f4xx_hal_conf.h文件:此文件定义了使能的HAL模块,并将一些参数(如外部高速振荡器频率)设为预定义的默认值,或根据用户配置(时钟树)进行设置。
  2. stm32f4xx_hal_msp.c(MSP MCU支持包):此文件定义了所有初始化函数,以便 根据用户配置(引脚分配、使能时钟、使用DMA和中断)配置外设实例。
  3. main.c负责:通过调用重置所有外设、初始化闪存接口和SysTick的HAL_init()函数将MCU重 置为已知状态,配置和初始化系统时钟,配置和初始化外设未使用的GPIO,为每个已配置的外设定义和调用外设初始化函数,该函数定义了将传递给相应外设HAL init函数(转而调用外设HAL MSP初始化函数)的句柄结构。当使用LwIP中间件时,底层以太网的初始化C代码将从main.c移至LwIP初始化C代码本身。
  4.  main.h文件:此文件包含与通过引脚布局选项卡所设置的引脚标签相对应的定义语句,以及通过配置选项卡所添加的用户项目常量。

3.项目文件解释

通过CubeMX配置生成的Keil工程,工程目录下,文件夹和文件数量众多,我们主要关注如下文件。

1.Keil工程文件:***.uvprojx

位于工程目录\MDK-ART文件夹下,Keil的工程文件,也是我们最重要的工程入口文件。双击它,可以打开Keil对工程代码进行编辑。

2.CubeMX配置文件:***.ioc

如果你安装了CubeMX软件,可以双击它,对本工程所使用的引脚、资源,进行修改配置;如果没有安装CubeMX软件,它是白色图标、无关联程序的状态,但不影响工程文件在Keil中的编辑。

3.BSP文件夹

自建的文件夹,存放一些模块、设备的底层驱动文件。平时复制、移植一些外部设备时,如串口屏模块,可以把它的驱动文件,统一存放在此文件夹中,然后在Keil里,添加文件路径、添加文件、引用头文件。

4.Core文件夹
CubeMX生成的工程文件夹,存放了CubeMX生成的外设代码文件。

5.Drivers文件夹
CubeMX生成的工程文件夹,存放了HAL库文件、芯片内核文件。

6.MDK-ARM文件夹
CubeMX生成的Keil工程文件夹,存放了Keil的工程入口文件、调试文件、编译输出文件等。

4.新建工程

CubeMX新建工程具体步骤这里不讲解,可以参考我的下一篇博文STM32CubeMX创建工程,每一步操作都有,适合初学者。

5.查看原工程

新建完工程之后,或者你想查看修改以前的老工程,在工程目录下直接双击加载先前保存的配置 ***.ioc文件即可。

四、FAQ

1.为什么芯片视图中有一些引脚以黄色或浅绿色突出显示? 为什么 我不能更改一些引脚的功能(点击一些引脚时没有任何反应)?

这些引脚属于特定引脚(如电源或BOOT引脚),不可用作外设信号。

2.在“引脚布局配置”面板中,在我添加新的外设模式时,为什么STM32CubeMX会移动一些功能?

您可能已取消选择。在这种情况下,工具会执行自动重新映 射,以优化放置位置。

3.在PC13、PC14、PC15和PI8之一已配置为输出的情况下,为什么STM32CubeMX不允许我将其配置为输出?

STM32CubeMX执行在参考手册的“输出电压特征”表中以注脚形式记录的限制条件:“PC13、PC14、PC15和PI8通过电源开关供电。由于该开关的灌电流能力有限(3mA),因此在输出模式下使用GPIO PC13到PC15和PI8时存在以下限制:速率不得超过2MHz,最大 负载为30pF,这些I/O不能用作电流源(如用于驱动LED)。”

4.以太网配置:为什么有时候我不能指定DP83848或LAN8742A?

对于大部分系列,STM32CubeMX将根据已选的以太网模式调整可行的PHY组件驱动程序列表。

  • 如果选择以太网MII模式,用户将能够在DP83848组件驱动程序与“用户Phy”之间选择。
  • 如果选择以太网RMII模式,用户将能够在LAN8742A组件驱动程序与“用户Phy”之间选择。
  • 如果选择“用户Phy”,用户需要手动添加组件驱动程序才能在其项目中使用。如参考我的一篇文章STM32网络通讯之CubeMX实现LWIP项目设计(十五)-CSDN博客里面有提到过。

对于STM32H7系列,PHY被视为外部组件,不再在以太网外设配置下指定。用户可在“LwIP平台设置”选项卡下选择PHY。但由于STM32H7固件包只提供在所有STM32H7评估板和Nucleo板上可用的LAN8742A组件的驱动程序代码,因此STM32CubeMX用户界面仅用于在“用户Phy”与LAN8742之间选择。如果选择LAN8742,BSP驱动程序代码会复制到生成的项目中。


总结

当然STM32CubeMX还有一些丰富的功能,如功耗计算、第三方插件STemWin、lwip、FATFS等功能使用,有待于你的开发。更多详细的使用参考《STM32CubeMX使用手册.pdf》,文档链接单片机STM32F407-Case程序代码例程-CSDN文库下载,找到对应的例程目录。

 

 

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

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

相关文章

top命令返回值有异常问题解决

异常问题:load average值不正常 排查思路: 1.找到是哪个进程引起的异常,看看是否有cpu占用过高或者mem占用过高的进程 再根据具体情况分析原因。 定位到异常进程后,首先打堆栈,留存现场日志,然后停止进…

sqlfather笔记

这里简单记录写学习鱼皮sqlfather项目的笔记,以供以后学习。 运行 将前后端项目clone到本地后,修改对应配置文件运行项目。 后端 1.配置好mysql后运行这个sql文件建立对应的表。 2.修改数据库密码 3.修改完后运行启动类即可 4. 启动结果 5.查看A…

【Axure高保真原型】数字滚动效果

今天和大家分享数字滚动效果的原型摸吧原型模板,效果包括: 在输入框输入目标数值后,点击滚动按钮,下方数字自动滚动到对应的数值; 在输入框输入初始数值后,点击设置初始值按钮,可以设置下方数字…

“AI人工智能内容辅助创作平台:让创意不再“卡壳”

在如今这个信息爆炸的时代,内容创作成了每个人的“必修课”。无论是自媒体大V、文案策划,还是普通学生写作文,大家都会遇到一个让人抓狂的问题——“创意枯竭”。有时候,脑袋里空空如也,一个字都写不出来,那…

VSCode最新离线插件拓展下载方式

之前在vscode商店有以下类似的download按钮,但是2025年更新之后这个按钮就不提供了,所以需要使用新的方式下载 ps:给自己的网站推广下~~(国内直连GPT/Claude) 新的下载方式1 首先打开vscode商店官网:vscode插件下载…

python——Django 框架

Django 框架 1、简介 Django 是用python语言写的开源web开发框架,并遵循MVC设计。 Django的**主要目的是简便、快速的开发数据库驱动的网站。**它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能…

搜索功能实现

前言 主要实现思路是全局监听点击事件的点击范围是否包含搜索结果内容。 效果 上代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

两份PDF文档,如何比对差异,快速定位不同之处?

PDF文档比对是通过专门的工具或软件&#xff0c;自动检测两个PDF文件之间的差异&#xff0c;并以可视化的方式展示出来。这些差异可能包括文本内容的修改、图像的变化、表格数据的调整、格式的改变等。比对工具通常会标记出新增、删除或修改的部分&#xff0c;帮助用户快速定位…

K8S 亲和性与反亲和性 深度好文

今天我们来实验 pod 亲和性。官网描述如下&#xff1a; 假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8-alpine docker pull nginx…

用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法

文章目录 1.数据库的链接和创建2.建库建表语句3.引入依赖4.yml配置文件5.添加相对路径6.实体类的书写7.Mapper接口的定义8.启动类的指定9.单元测试10运行时的bug 1.数据库的链接和创建 下面的这个就是使用的我们的IDEA链接这个里面的数据库&#xff1a; 接下来就是输入这个用户…

TL3562/3568移植无锡沐创N500L-AM4驱动进内核源码,报错及其解决方案

前言 创龙官方提供的资料无锡沐创N500L-AM4驱动是rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz&#xff1b;无锡沐创官方&#xff0c;截止目前&#xff0c;最新驱动是rnpgbe-0.2.3-f26b9a4.tar.gz。考虑到开发的稳妥性&#xff0c;先选用创龙尝试过的rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz来移…

CycleGAN - CycleGAN网络:无监督图像到图像转换的生成对抗网络

1. 背景与问题 在图像到图像转换任务中&#xff0c;传统的生成对抗网络&#xff08;GANs&#xff09;依赖于成对的训练数据来进行监督学习。然而&#xff0c;获得大量成对标注数据通常是昂贵且耗时的。在许多应用中&#xff0c;真实世界的标注数据往往是稀缺的&#xff0c;因此…

空间解析几何8:空间线段与圆锥侧面的最短距离【附MATLAB代码】

理论推导 matlab代码 function [dmin] distanceConeToLine (A1,B1,A2,B2,R) dmin 100000000; h norm(A2-B2); A B1(1)-A1(1); if(abs(A)<1e-2)A 1e-2; end B B1(2)-A1(2); if(abs(B)<1e-2)B 1e-2; end C B1(3)-A1(3); F A1(1)*CA*h-A1(3)*A; G A1(2)*CB*h-A1(…

K8S 集群搭建和访问 Kubernetes 仪表板(Dashboard)

一、环境准备 服务器要求&#xff1a; 最小硬件配置&#xff1a;2核CPU、4G内存、30G硬盘。 服务器可以访问外网。 软件环境&#xff1a; 操作系统&#xff1a;Anolis OS 7.9 Docker&#xff1a;19.03.9版本 Kubernetes&#xff1a;v1.18.0版本 内核版本&#xff1a;5.4.203-…

2024:成长、创作与平衡的年度全景回顾

文章目录 1.前言2.突破自我&#xff1a;2024年个人成长与关键突破3.创作历程&#xff1a;从构想到落笔&#xff0c;2024年的文字旅程4.生活与学业的双重奏&#xff1a;如何平衡博客事业与个人生活5.每一步都是前行&#xff1a;2024年度的挑战与收获6.总结 1.前言 回首2024年&a…

HTML<form>标签

例子 具有两个输入字段和一个提交按钮的HTML表单&#xff1a; <form action"/action_page.php" method"get"> <label for"fname">First name:</label> <input type"text" id"fname" name"f…

C++:输入3个整数,利用指针和函数,按由小到大的顺序输出。

输出样例如图所示&#xff1a; 代码如图&#xff1a; #include<iostream> using namespace std;void exchange(int* x, int* y){int temp;temp *x;*x *y;*y temp; }int main(){int a 0, b 0, c 0;int* p1 &a, * p2 &b, * p3 &c;cout << &quo…

【QT】 控件 -- 按钮类(Button)

&#x1f525; 目录 1. 前言 2. Push Button 按钮 1、带有图标的按钮 -- 纯代码实现2、带有快捷键的按钮 -- 图形化&代码实现 3、按钮的重复触发 3. Radio Button 按钮 **1. click、press、release、toggled 的区别** **2. 单选框分组** 4. Check Box 复选 5. Tool Butto…

【Linux】Linux入门(三)权限

目录 前提权限概念whoami指令 Linux权限管理文件访问者的分类&#xff08;人&#xff09;file指令权限信息权限的表示方法 chmod指令 更改权限chown指令 修改文件&#xff0c;文件夹所属用户和用户组 权限掩码umask&#xff08;权限掩码&#xff09; 粘滞位 前提 请先看下面这…

Unity编辑器缩放设置

Unity默认界面UI字体太小了&#xff0c;可以设置一下缩放 打开首选项&#xff0c; UI Scaling 设置成125%或者更大 &#xff0c;然后重启