大部分基于ARM内核的MCU程序开发的集成开发环境一般是Keil MDK或IAR,但这2款软件商用时,都是需要收费的。
这里介绍一种完全免费使用的MCU程序开发环境,配置好之后,使用起来的效果基本上和以上2款软件差不多,代码编辑功能甚至比以上2款软件效果还要好。
本教程将包含以下几个部分。(灰色部分内容如有需要,请在微信中搜索“固件工人”微信公众号并关注,以获取相关文章内容)。
- 需要安装的软件。
- 需要的MCU程序代码。
- 开发环境搭建步骤。
- 移植STM32官方代码。
- CMake的相关设置。
- VS Code软件设置。
- 代码构建和运行。
- 附录。
1.1 需要安装的软件
本教程需要使用到的软件列表如下。
1)VS Code软件
VS Code软件的全称是Visual Studio Code,是微软开发的一款免费的编辑器软件。虽然只是一款编辑器软件,但是通过插件扩展功能,可以实现很多额外的功能。该软件的下载地址如下。
https://code.visualstudio.com/
2)GCC软件
这里要使用的GCC软件是ARM内核的单片机(MCU)代码编译链接专用的GCC软件,软件名称为:arm-none-eabi-gcc。该软件的下载地址如下。对于Windows系统,需要下载该系统对应的版本。
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
3)CMake软件
CMake软件主要用于实现程序代码的自动化编译链接。该软件的下载地址如下。对于Windows系统,需要下载该系统对应的版本。
https://cmake.org/download/
4)make软件
make软件用于和CMake软件配合实现程序代码的自动化编译链接。该软件的下载地址如下。建议下载Setup的版本,会包含依赖的相关文件。
https://gnuwin32.sourceforge.net/packages/make.htm
5)OpenOCD软件
该软件主要用于控制仿真器以实现将程序代码下载到MCU中,或结合仿真器对代码进行调试。该软件的下载地址如下。展开Assets可以下载可执行文件。
https://github.com/openocd-org/openocd/releases
6)Cortex Debug插件
这个是VS Code软件的一个插件,用于和OpenOCD结合实现对代码的调试,可以实现代码的下载和断点调试等功能。该插件可以直接通过VS Code的插件界面搜索Cortex Debug并安装即可。
7)C/C++ Extension Pack插件
这个是VS Code软件的一个插件,会安装C/C++相关的代码解析器,方便进行代码的查看和编辑。该插件可以直接通过VS Code的插件界面搜索C/C++ Extension Pack并安装即可。
8)ST-LINK仿真器驱动
我这里使用的ST官方开发板上附带了ST-LINK的仿真器,所以需要安装该仿真器对应的USB驱动软件。该驱动软件的下载地址如下。
https://www.st.com/en/development-tools/stsw-link009.html
1.2 需要的MCU程序代码
我手上有一块STM32F429I-DISCO的开发板,所以我这里以ST的官方代码为例进行讲解。对应该开发板的官方代码下载地址如下。下载时需要登录ST账号才能下载,所以没有账号的话需要先注册,或者以访客(guest)模式进行下载。
https://www.st.com/en/embedded-software/stm32cubef4.html#get-software
1.3 开发环境搭建步骤
下面讲解开发环境的具体搭建步骤。
1)先安装好前面说的那些软件和插件。我下载的CMake、GCC和OpenOCD都是非安装版本的压缩包形式,所以只需要解压到指定目录下就可以了。我这边统一解压到了以下目录。

2)由于是非安装的版本,所以为了后面软件能自动找到这些软件,需要把这些软件的bin目录添加到Windows系统的环境变量Path中。不知道如何添加环境变量的可以参考我之前的文章实用小技巧2:环境变量的设置。
3)以上操作完成后,开发环境的准备工作基本就做好了,后面就开始进行MCU代码的移植了。
1.4 移植STM32官方代码
STM32官方代码包含了对应MCU的相关例程代码、官方开发板相关代码、第三方的相关代码以及相关的使用说明文档,所以下载下来的压缩包很大。里面很多内容我们暂时都不需要,所以这里针对STM32F429I这款MCU,进行必要代码的移植,创建一个最小的代码工程。
1.4.1创建代码工程并移植官方代码
创建最小代码工程的操作步骤如下。
1)在自己工作目录创建一个文件夹,用于保存所有的代码文件。我这里创建的文件夹名称为STM32F429I_PRJ,然后进入该文件夹。
2)在该文件夹下创建新文件夹Drivers,用于保存STM32的MCU需要的相关驱动代码文件。
3)在Drivers文件夹下再分别创建3个文件夹:BSP、CMSIS和STM32F4xx_HAL_Driver。该目录结构和ST的官方开发包结构保持一致。其中BSP文件夹下放置开发板对应的驱动代码,CMSIS文件夹下放置ARM内核相关的驱动代码,STM32F4xx_HAL_Driver文件夹下放置STM32F4系列MCU对应的驱动代码。
4)BSP文件夹下创建一个以开发板名称命名的文件夹STM32F429I-Discovery,然后将官方开发包中STM32F429I-Discovery文件夹下的stm32f429i_discovery.c和stm32f429i_discovery.h文件拷贝到该文件夹中。如下图所示。

5)CMSIS文件夹下创建Core和Device文件夹,Core文件夹下再创建Include文件夹,然后将官方开发包中Drivers\CMSIS\Core\Include中的如下图中的5个文件拷贝到该文件夹中。

6)Device文件夹下依次创建ST\STM32F4xx\Include文件夹,然后将官方开发包Drivers\CMSIS\Device\ST\STM32F4xx\Include中的如下图中的3个文件拷贝到Include文件夹中。

7)将官方开发包Drivers\STM32F4xx_HAL_Driver下的Inc和Src文件夹直接拷贝到该工程的STM32F4xx_HAL_Driver文件夹中。如下图所示。

8)通过以上操作,驱动相关的代码就已经完成移植。接着开始移植官方的模板代码。在工程文件夹STM32F429I_PRJ下依次新建Projects\STM32F429I-Discovery\Example文件夹,进入Example文件夹。
9)将官方开发包Projects\STM32F429I-Discovery\Templates下的Inc和Src文件夹拷贝到Example文件夹中。官方的Templates例程代码是个空的死循环。我们这里在main()函数中添加一些闪灯的代码,方便后面查看运行效果。具体修改如下面代码所示。另外需要在main.h文件中添加#include "stm32f429i_discovery.h"的头文件包含。
int main(void)
{
/* STM32F4xx HAL library initialization:
- Configure the Flash prefetch, Flash preread and Buffer caches
- Systick timer is configured by default as source of time base, but user
can eventually implement his proper time base source (a general purpose
timer for example or other time source), keeping in mind that Time base
duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
handled in milliseconds basis.
- Low Level Initialization
*/
HAL_Init();
/* Configure the System clock to 180 MHz */
SystemClock_Config();
/* Add your application code here
*/
BSP_LED_Init(LED3);
/* Infinite loop */
while (1)
{
BSP_LED_Toggle(LED3);
HAL_Delay(500);
}
}
10)由于这里使用的是gcc的编译器和链接器,所以链接文件需要使用.ld文件。在Example文件夹下新建Link文件夹,然后将官方开发包Projects\STM32F429I-Discovery\Templates\STM32CubeIDE下的STM32F429ZITX_FLASH.ld文件拷贝到Link文件夹中。接着将官方开发包Projects\STM32F429I-Discovery\Templates\STM32CubeIDE\Example下的Startup文件夹拷贝到Example文件夹中。最终Example文件夹的内容如下图所示。

通过以上操作,最小工程所需的所有代码都已经准备完毕。后续进行CMake以及VS Code开发环境、编译链接和调试的相关设置即可(该部分内容如有需要,请在微信中搜索“固件工人”微信公众号并关注,以获取相关文章内容)。


被折叠的 条评论
为什么被折叠?



