历史上的今天
返回首页

历史上的今天

今天是:2024年08月29日(星期四)

正在发生

2019年08月29日 | 使用STM32CubeMX 图形配置工具生成STM32 工程代码

2019-08-29 来源:eefocus

STM32CubeMX 教程

简介:

STM32CubeMX 是 ST 意法半导体近几年来大力推荐的 STM32 芯片图形化配置工具,允许用户使用图形化向导生成 C 初始化代码。


其特性如下:


直观的选择 MCU 型号,可指定系列、封装、外设数量等条件;

微控制器图形化配置;

自动处理引脚冲突;

动态设置时钟树,生成系统时钟配置代码;

可以动态设置外围和中间件模式和初始化;

功耗预测;

C 代码工程生成器覆盖了 STM32 微控制器初始化编译软件,如 IAR,KEIL,GCC;

可以独立使用或者作为 Eclipse 插件使用。

注意:STM32Cube包含 STM32CubeMX 图形工具和 STM32Cube 库两个部分,使用 STM32CubeMX 配置生成的代码,是基于 STM32Cube 库的。

不同的 STM32 系列芯片,会有不同的 STM32Cube 库支持,而 STM32CubeMX 图形工具只有一种。所以我们配置不同的 STM32 系列芯片,选择不同的 STM32Cube 库即可。

在这里插入图片描述

STM32CubeMX 运行环境搭建

STM32CubeMX 运行环境搭建包含两个部分。首先是 Java 运行环境安装,其次是STM32CubeMX 软件安装。


Java 软件安装

Java 的安装直接去官网安装即可 www.java.com

注意:STM32CubeMX 的 Java 运行环境版本必须是 V1.7 及以上,如果你的电脑安装过 V1.7 以下版本,请先删掉后重新安装最新版本


STM32CubeMX 软件安装

STM32CubeMX 的安装同样直接去官网安装即可http://www.st.com/stm32cube


运行STM32CubeMX 并生成工程代码

软件设置

安装完成STM32CubeMX 并打开:

在这里插入图片描述

首先需要在软件中指定STM32Cube 软件包:点击Help >> Updater Settings

在这里插入图片描述

在Repository Folder 中选择stm32cubexL4 固件包存放目录。

(stm32cube 文件夹名字遵循 STM32Cube_FW_Lx_Vm.n.z 格式,我们指定的“Repository Folder”下面必须存在一个或者多个STM32Cube_FW_Lx_Vm.n.z格式程序包,在STM32CubeMX生成工程的时候,会根据我们选择的芯片型号,去这个目录加载必要的库文件)


使用STM32CubeMX 工具配置工程模板

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


使用 STM32CubeMX 配置工程的一般步骤:

工程初步建立并保存;

RCC 设置;

时钟系统(时钟树)配置;

GPIO 功能引脚配置;

生成工程源码。

1. 工程初步建立并保存

在这里插入图片描述

在软件初始界面中点击:File >> New Project

弹出MCU 选择窗口进行配置(我以STM32L475 为例):

在这里插入图片描述

左侧一栏选择完成后双击中间第二条(STM32L475VETx)确定选择。

防止软件使用过程中出现意外导致工程没有及时保存,此时先保存一遍,点击:File >> Save Project

在这里插入图片描述

软件工程建立好后(未生成代码):

在这里插入图片描述

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


2. RCC 设置

按照图片选择这一栏,并选择Crystal/Ceramic Resonator,即设置HSE 的值为使用晶振/陶瓷振荡器。


并可观察到在设置了RCC 时钟后,引脚图中相应管脚由灰变绿:

在这里插入图片描述

配置好RCC 后,接下来配置时钟系统树。


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

在这里插入图片描述

以上设置完成后,HCLK=80MHZ,Systick=80MHz,PCLK1=80MHz,PCLK2=80MHz。

配置完时钟系统之后,这个时候如果我们直接使用软件生成工程,那么我们就可以从工程中提取系统时钟初始化配置相关代码。


4. GPIO 功能引脚配置

在图示位置进行GPIO 引脚搜索,即可找到需要配置的引脚:

在这里插入图片描述

然后便对相应引脚进行输入输出复用等功能进行配置:

在这里插入图片描述

我将PE7、PE8、PE9 都设置为输出模式:

在这里插入图片描述

配置完IO 口功能之后,还要配置 IO 口的速度,上下拉等参数:

在这里插入图片描述

依次点击引脚进行配置:


在这里插入图片描述
在这里插入图片描述

5. 生成工程源码

在生成源码之前首先配置一下生成文件的属性:

在这里插入图片描述

然后点击GENERATE CODE:

在这里插入图片描述
在这里插入图片描述


随后可以看到目标文件夹中有如下文件:


在这里插入图片描述

Drivers 文件夹存放的是 HAL 库文件和 CMSIS 相关文件;

Inc 文件夹存放的是工程必须的部分头文件;

MDK-ARM 下面存放的是 MDK 工程文件;

Src 文件夹下面存放的是工程必须的部分源文件;

Template.ioc 是 STM32CubeMX 工程文件。

打开MDK-ARM 中的工程文件并编译:

在这里插入图片描述
在这里插入图片描述

我们就可以发现该工程文件当中确实按照我们设置的那样写好了RCC 和GPIO 配置函数:


在这里插入图片描述
在这里插入图片描述

注意:STM32CubeMX 生成的main.c 文件中,有很多地方有“/* USER CODE BEGIN X /”和“/ USER CODE END X */”格式的注释,我们在这些注释的 BEGIN 和 END 之间编写代码,那么重新生成工程之后,这些代码会保留而不会被覆盖。


大多数情况下,我们使用 STM32CubeMX 主要用来配置时钟系统和外设初始化代码。

推荐阅读

史海拾趣

铨力(ALLPOWER)公司的发展小趣事

随着新能源汽车市场的快速发展,铨力公司看到了新的发展机遇。于是,公司开始布局新能源汽车领域,研发和生产新能源汽车所需的电源和充电设备。通过不断创新和拓展市场,铨力在新能源汽车领域也取得了显著的成绩,为公司的发展注入了新的动力。

这五个故事展示了铨力(ALLPOWER)公司在电子行业中的发展历程和取得的成就。从创立初期的太阳能电源产品研发,到技术突破和产品升级,再到国际市场的拓展和产业链整合,以及新能源汽车领域的布局,铨力始终保持着创新的精神和进取的态度,不断推动着公司的发展。

Corporation Soneet公司的发展小趣事

在电子行业的激烈竞争中,一家名为Soneet的新兴公司凭借其在半导体技术上的创新突破,逐渐崭露头角。Soneet的研发团队经过数年的努力,成功开发出一种新型的低功耗、高性能的芯片,这一技术突破不仅提高了电子设备的性能,还大大降低了能耗。凭借这一优势,Soneet迅速赢得了市场的认可,其产品在各大电子设备制造商中广受欢迎。

DURATOOL公司的发展小趣事

人才是企业发展的第一资源。DURATOOL公司一直高度重视人才的培养和引进。公司建立了一套完善的人才选拔和培养机制,通过内部培训、外部招聘等方式不断吸纳优秀人才加入公司。同时,公司还为员工提供了广阔的发展空间和良好的福利待遇,激发了员工的积极性和创造力。这些举措使得DURATOOL公司拥有一支高素质、专业化的员工队伍,为企业的发展提供了有力的人才保障。

Alps Alpine Co Ltd公司的发展小趣事

人才是企业发展的第一资源。DURATOOL公司一直高度重视人才的培养和引进。公司建立了一套完善的人才选拔和培养机制,通过内部培训、外部招聘等方式不断吸纳优秀人才加入公司。同时,公司还为员工提供了广阔的发展空间和良好的福利待遇,激发了员工的积极性和创造力。这些举措使得DURATOOL公司拥有一支高素质、专业化的员工队伍,为企业的发展提供了有力的人才保障。

AMRI Enterprise Co Ltd公司的发展小趣事

AMRI Enterprise Co Ltd在电子行业中崭露头角,源于其一次重大的技术突破。公司研发团队经过数年的努力,成功开发出了一款具有高效能、低功耗特点的芯片,引起了市场的广泛关注。这一技术突破不仅提升了AMRI的产品竞争力,还为公司赢得了众多合作伙伴的青睐。随着产品线的不断扩展和市场份额的逐步增加,AMRI逐渐在电子行业中站稳了脚跟。

Global Power Technologies Group公司的发展小趣事
选择合适的电阻、电容和三极管等元件,确保电路的稳定性和可靠性。

问答坊 | AI 解惑

建QQ群,掌握大赛随时动态,把QQ群都留在这里吧!

本帖最后由 paulhyde 于 2014-9-15 09:07 编辑 谁能建立个QQ群! 把群号留下,让大家进去 进来的就帮忙定一下,保证更多的人能加入!!!  …

查看全部问答>

关于8255A的端口寻址问题

当8255A做为89C51的并行IO扩充端口时,其端口地址虽然是根据A0、A1来选择的。但是具体怎么确定我还不不太明白,比如说如何确定PA口,PB口,PC口的地址。希望高手们能帮我解答。谢谢了。…

查看全部问答>

有用就看看吧!

有用就看看吧——利用LDO改善白光LED的匹配度! [ 本帖最后由 雪山飞狐 于 2010-5-20 18:05 编辑 ]…

查看全部问答>

在ADS1.2下面用AXD调试PowerPC的bootrom

ADS1.2是ARM的调试工具,是否可以在其下面用AXD调试飞思卡尔的PowerPC的bootrom呢?具体怎么操作呢?谢谢!…

查看全部问答>

cpu指令与机器码一样吗

机器码就是cpu指令码? 哪位高手能给我一份资料。…

查看全部问答>

WINCE60下怎么生成中文NK,试了WINCE50下的方法(本地化),不行,参考VS2005还是不行,GOOGLE没找到好方法!

WINCE60下怎么生成中文NK,试了WINCE50下的方法(本地化),不行,参考VS2005还是不行,GOOGLE没找到好方法!…

查看全部问答>

多线程的问题

hi every, 怎样知道当前正在运行的是哪个线程?OS是wince …

查看全部问答>

请问可以在ARM9 移埴WINCE操作系统吗?

现在ARM9开发板有周立功的ARM9 移埴VXWORK或者LINUX的操作系统,如果想学移埴WINCE操作系统,买哪一家的学习板好些?还有这三个操作系统各有什么优点和缺点呢?…

查看全部问答>

USB Blaster的制作

最近参考zliang和sm fish的原理图在画ub的电路,今天收到板子,马上投入到焊接中,焊接结束后,下载pof文件,烧写FT245r,装驱动都没有问题,在quartus ii 里也可以发现ub,但是在下载时出现如下错误       在auto detect中出现 ...…

查看全部问答>

唉,都走了,就剩下我一个人了!~

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 空荡荡的寝室就剩下我一个。 还在坚持为着11年的大赛奋斗,没有朋友,没有队友.......... 恩,说句时髦的话就应该叫 “裸赛” 了呵呵!  …

查看全部问答>