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

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

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新建工程具体步骤这里不讲解,可以参考STM32CubeM - 新建一个工程- CSDN博客这篇博文,每一步操作都有,适合初学者。

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文库下载,找到对应的例程目录。

相关文章:

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

STM32F407 系列文章 - STM32CubeMX(十七) 目录 前言 一、CubeMX 二、下载安装 1.下载 2.安装 3.图解步骤 三、用户界面 1.项目配置 2.项目生成 3.项目文件解释 4.新建工程 5.查看原工程 四、FAQ 总结 前言 STMCube源自意法半导体&#xf…...

css3过渡总结

一、过渡的定义与作用 CSS3 过渡(Transitions)允许 CSS 属性在一定的时间区间内平滑地过渡,从一个值转变为另一个值。它能够让网页元素的状态变化更加自然、流畅,给用户带来更好的视觉体验。例如,当一个元素从隐藏状态…...

latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)

文章目录 1、SHOW TABLE STATUS WHERE Name batch_version;2、latin1_swedish_ci使用场景注意事项修改字符集和排序规则修改表的字符集和排序规则修改列的字符集和排序规则修改数据库的默认字符集和排序规则 3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 C…...

C语言编程笔记:文件处理的艺术

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、为什么要用文件二、文件的分…...

[创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想

目录 前言:数字化转型对于企业而言,是一种全方位的变革 一、主要章节 1、认知篇(第1~2章)- Why 2、方法篇(第3~5章)- How 3、实践篇(第6~10章)- 实践 4、平台篇(第…...

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答: 问:《汽车维修技师》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《汽车维修技师》级别? 答:省级。主管单位:北方联合出版传媒(…...

2024 京东零售技术年度总结

每一次回望,都为了更好地前行。 2024 年,京东零售技术在全面助力业务发展的同时,在大模型应用、智能供应链、端技术、XR 体验等多个方向深入探索。京东 APP 完成阶段性重要改版,打造“又好又便宜”的优质体验;国补专区…...

PyTorch使用教程(8)-一文了解torchvision

一、什么是torchvision torchvision提供了丰富的功能,主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集,如ImageNet、CIFAR-10、MNIST等,方便开发者进行训练和评估。模型模块封装了大量经…...

如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览

在现代Web应用中,文件预览是一项常见且重要的功能。它允许用户在不上传或下载文件的情况下,直接在浏览器中查看文件内容。然而,直接将文件存储服务(如MinIO)暴露给前端可能会带来安全风险。本文将介绍如何在不暴露MinI…...

ICMP协议和ICMP重定向攻击

✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一,ICMP基本概念二&…...

leetcode203-移除链表元素

leetcode203 什么是链表 之前不懂链表的数据结构,一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的,题目中给的链表是单向链表,有两个值,一个val表示值,一个next:表示连接的下一个…...

Rust 中构建 RESTful API

在 Rust 中构建 RESTful API,你可以选择几个不同的框架。每个框架有不同的特点、优缺点和适用场景,下面我将介绍几个常用的 Rust Web 框架,并分析它们的优缺点。 Actix Web 简介: Actix Web 是一个非常高性能的 Web 框架&#xf…...

Sqlmap入门

原理 在owasp发布的top10 漏洞里面,注入漏洞一直是危害排名第一,其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行,通过执行这些恶意语句欺骗数据库执行,导致数据库信息泄漏 分类 按注入类型 常见的sql注入…...

迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?

【图片来源于网络,侵删】 这是2024年初Figure公司展示的人形机器人Figure 01,他可以通过观看人类的示范视频,在10小时内经过训练学会煮咖啡,并且这个过程是完全自主没有人为干涉的! 【图片来源于网络,侵删】…...

移动端 REM 适配

移动端 REM 适配 Vant 中的样式默认使用 px 作为单位,如果需要使用 rem 单位,推荐使用以下两个工具: postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 remlib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配…...

逐笔成交逐笔委托Level2高频数据下载和分析:20241230

逐笔委托逐笔成交下载 链接: https://pan.baidu.com/s/11Tdq06bbYX4ID9dEaiv_lQ?pwdcge6 提取码: cge6 Level2逐笔成交逐笔委托数据分享下载 利用Level2的逐笔交易和委托数据,这种以毫秒为单位的详细信息能揭露众多关键信息,如庄家意图、伪装行为&…...

C#实现字符串反转的4种方法

见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…...

UDP 单播、多播、广播:原理、实践

一、引言 在计算机网络通信领域,UDP(User Datagram Protocol,用户数据报协议)是一种重要的传输层协议。它以无连接、低开销的特点,在众多实时性要求高的应用场景中发挥关键作用。UDP 支持单播、多播和广播三种通信模式…...

深入浅出:Go语言中的bytes包与字节串操作详解

标题:深入浅出:Go语言中的bytes包与字节串操作详解 引言 在Go语言的世界里,bytes包是一个非常重要的标准库,它为开发者提供了高效处理字节切片(byte slice)的功能。无论是处理二进制数据、UTF-8编码的字符串,还是进行高效的数据读写操作,bytes包都扮演着不可或缺的角色…...

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2: 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...