[i=s] 本帖最后由 飞思啦 于 2025-2-27 17:19 编辑 [/i]<br />
<br />
前言
很多人对stm32的开发普遍使用keil,IAR这两个工具,追求调试方便,编译快速都会选择keil,追求编译后的文件大小极致小,会选择IAR,不过这两个软件都是收费软件,商业目的并不能用。还有些人会选择eclipse+gcc或者vscode+gcc的方式,这个属于比较新颖的方式,我在日常的开发中,使用的是stm32cubeMX生成代码,然后用vscode看代码。再直接用gcc编译,没有继承到vscode中(stm32开发用的少,所以没继承)。不过这里选择使用stm32cubeIDE的方式来搭建开发环境,听说该工具支持代码生成、编译、下载、调试一条龙。一起来试试吧。
stm32cubeIDE
STM32CubeIDE是一个高级的C/C++开发平台,专为STM32微控制器和微处理器设计,具备外围设备配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和GCC工具链进行开发,并使用GDB进行调试。STM32CubeIDE允许集成现有的数百种插件,这些插件可以完善Eclipse® IDE的功能。
下载IDE
我们首先直接在stm32官网下载stm32cubeIDE,网址如下:
https://www.st.com/en/development-tools/stm32cubeide.html
在图片中选择自己系统对应的版本下载即可,我们一般都在windows下面开发,选择win版本就行了。
下载H7的package
这个就像是keil一样,不过keil是任意系列单片机都需要单独下载package,但是对于stm32cubeIDE来说,只有一些不常用的需要单独下载package,比如我们的H745单片机,他需要下载STM32Cube MCU Package for STM32H7 series。
下载网址如下:
https://www.st.com/en/embedded-software/stm32cubeh7.html
打开下载网址之后,可以看见里面有2个包,为什么会有2个,我刚刚打开的时候只是单纯的以为是版本号不一样,既然都是测评,那肯定要下载最新版的package包来测评。
但是其实并不是单纯的版本号不一样。其实从他们两个的名字上就可以看出来一点端倪,可惜我当初没发现,折腾了一段时间。

1、下载
要使用最新版的1.12.1版本的package,需要直接把2个包都下载了,下载后发现一个包的大小为1.09GB(en.stm32cubeh7-v1-12-0.zip),另一个包的大小为615MB(en.stm32cubeh7-v1-12-1.zip)。感觉很奇怪,版本升级之后,大小差异怎么会这么大?
2、对比
使用对比软件对比两个包的差异,可以发现除了Project的差异比较小之外,其他几个文件夹的差异都是很大,其中大多都是en.stm32cubeh7-v1-12-0.zip包里面有,但是en.stm32cubeh7-v1-12-1.zip包里面没有,比如driver文件夹下面的BSP文件夹,en.stm32cubeh7-v1-12-1居然是空的。自此有了初步结论,1.21.1是一个补丁包,需要搭配1.12.0来使用。接下来就来验证。

3、安装pack
和keil一样,stm32CubeIDE针对H7这种芯片,也是需要额外自己安装pack包的。首先我们在打开软件之后,在Help里面选择Configuration Tool,然后选择“Manage Embedded Software Packages”来打开包管理器。
在弹出的页面接着选择“From Loacl”来导入pack包,选择1.12.1版本的包。然后确认后,发现其存在弹窗,提示报错。此时进一步验证了我们猜想,1.12.1包只是一个补丁包,需要在1.12.0的基础上打补丁。

顺便一提,H7的pack包安装好了之后,包很大,很占空间,而且stm32cubeide软件默认是把包安装在C盘的,对C盘空间有限的人来说,这可不好。这里教教大家如何修改包安装的路径。打开 stm32cubeIDE软件,然后依次点击Window,然后选择Preference。

于是我们按照我们的猜想,首先导入1.12.0的包,导入成功以后,再在包安装的位置,解压1.12.1的包进行覆盖。
然后开始解压1.12.1的包,解压到我们的安装路径
遇到重名文件选择覆盖即可
解压完成后,记得修改目录为1.12.1

然后到包管理工具里面,发现原来的1.12.0没有被选中了,任意一个包都没被选中,没关系,可以联网,点一下“Refresh”按钮。等待刷新完成以后,就可以发现出现了1.12.1版本了。

新建工程
选择新建一个stm32的工程,如下图所示

我们的是stm32官方的板子,新建工程的时候,选择“Board Selector”,然后选择“STM32H745I-DISCO”板子,然后点击next。

工程名字和工程存放路径可以自己定义就行了。确定之后,会开始初始化工程,这里等的挺久的,可能是我电脑不行,没事,慢慢等,
加载成功以后,会自动打开test.ioc文件,就是打开工程配置文件,让你配置GPIO,时钟之类的,这里先不管它,我们确保工程能新建成功。

编译工程
编译
因为H745是双核,我们首先编译CM4内核的程序,选择CM4的工程,然后点击编译按钮。

同理,对于M7的内核,也是一样的,直接选中工程,点击编辑按钮即可。
可以发现两个工程编译是没有任何报错的,不过查看编译后生成的文件,发现一个问题,编译后生成了map/elf文件,但是为什么没有生成用于烧录的bin文件或者hex文件?接下来说一说怎么生成hex和bin文件。
生成烧录文件
右键选中工程,注意不是整个工程。而是CM4和CM7需要分别设置。如下图所示。勾选两个框,分别用于生成bin文件和hex文件。

之后需要右键先清除一下工程,再重新编译工程即可。


添加点灯代码
配置引脚
我们前面创建工程的时候是基于板子创建工程的,所以在引脚配置页面可以看见,板子用到的引脚都已经配置了,配置了名称,GPIO方向等,但是没有把引脚引入CM4或者CM7。如下图所示,点灯引脚PI13配置为输出,名称为LD2 [Green Led],无上下拉,但是“Pin Context Assignment”却配置为free,我们这里把它引入CM4内核观察观察。


保存后弹窗提示是否立即生成代码,选择是

代码变化
生成代码之后,打开CM4工程的main.c文件可以看到代码自动对我们刚刚配置的点灯引脚初始化了。

添加灯闪烁代码
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_Delay(500);
对于CM7核,用同样的办法,可以配置另一个灯,实现CM4和CM7两个核分别控制一个灯。
至此点灯完成