一.前言
自从看了稚晖君几期视频之后,感觉自己就对他的才华着了魔;稚晖君的大多数项目里边都在用STM32单片机,正好自己也在自学STM32单片机。从他的视频中看到,稚晖君开发STM32用的IDE居然不是Keil,而且界面也挺好看,后来去搜所发现稚晖君使用的CLion进行的开发,并且在稚晖君的知乎也有对CLion开发STM32环境进行配置的文章(稚晖:配置CLion用于STM32开发【优雅の嵌入式开发】)。于是,我也想着学一下使用CLion来开发STM32;当我下载好CLion准备大展身手的时候,忽然发现CLion是收费的,而且还是199刀一年;这让本就不富裕并且喜欢白嫖的我选择直接放弃。
后来,在B站、CSDN等平台忽然发现一款被称为宇宙最强编辑器的VSCode也可以用来开发STM32,并且是免费使用的。经过翻看各种文章,以及花费自己一天的时间,最终是完成了VSCode的环境配置,实现了编译、下载、调试等功能,并写下此文章作为学习总结。
本次介绍的是VSCode+STM32CubeMX来进行STM32的开发,使用的是HAL库,CubeMX软件以及HAL库的优点就不再做介绍了;接下来,准备开干~
二.软件工具下载及环境配置
1.Visual Studio Code:
直接在微软官网下载最新版软件:https://visualstudio.microsoft.com/zh-hans/
2.STM32CubeMX:
直接在ST的官网下载最新软件:STM32CubeMX - STMicroelectronics
3.MinGW
VSCode需要使用MinGW的make命令来编译代码,到MinGW的主页下载Windows版本的安装器。下载地址:Minimalist GNU for Windows
MinGW安装器下载
下载好后进行安装,并且记住安装的位置,下面会用到。
MinGW安装路径
安装完成在安装目录下找到文件夹,将bin文件的路径复制下来。
复制Bin文件夹路径
然后将bin文件夹的路径添加进环境变量中
搜所环境变量
选择环境变量
选择Path并编辑
将MinGW添加进环境变量
最后点击所有的确定完成配置。
打开命令终端,输入make测试安装结果。
make测试
可以看到,命令端提示无法识别make命令;这是因为在MinGW的Bin文件下,make命令的全称为mingw32-make,为了方便,将该可执行程序复制一份,修改名称为make。
将mingw32-make复制重命名make
然后重新输在终端重新输入make进行测试,这时候没有红色报错,就表示成功搭建。
再次测试make
4.arm-none-eabi-gcc
arm gcc是编译的工具链,Windows版下载地址:Arm GNU Toolchain | GNU Arm Embedded Toolchain Downloads – Arm Developer;直接下载zip格式的就行,免得安装。
下载arm gcc
将其解压出来后放在C盘根目录下(也可以放在其他地方),然后同样的复制bin文件的路径添加到环境变量中
将arm gcc添加进环境变量
5.Openocd
openocd是用于对STM32进行下载和仿真的工具,是一个开源软件包。Windows下载地址:Download OpenOCD for Windows
openocd下载界面
将其解压出来后放在C盘根目录下(也可以放在其他地方),然后同样的复制bin文件的路径添加到环境变量中
将openocd添加进环境变量
三、VSCode插件安装
在VSCode中安装如下插件
插件安装
1.C/C++
用于代码高亮显示以及自动补全等功能。
2.Cortex-debug
用于调试STM32的插件
3.Chinese(Simplified)简体中文
VSCode显示为中文界面,当然,如果你英语比较好,可以不用安装。
四、利用CubeMX将工程生成为Makefile
这里就不在讲述CubeMX如何来配置STM32单片机这些内容了
CubeMX生成Makefile
五、VSCode配置
用VSCode打开CubeMX生成的工程文件。
1.C/C++编辑配置
按住快捷键 Ctrl + Shift + P ,选择 C/C++:编辑配置(UI),将编译器路径改为gcc.exe,将IntelliSense 模式改为Windows-gcc-arm
这时会在文件夹中自动生成一个.vscode文件夹,打开文件夹中的c_cpp_properties.json文件(这就是C/C++:编辑配置(UI)生成的文件)。将头文件路径和对应单片机的宏定义写在如图所示的地方。
不同型号的单片机宏定义不太一样,可以在MakeFile文件中查看。注意:添加到宏时记得将-D去掉,不是在Makefile中去掉-D。
单片机宏定义
2.程序编译
编译程序可以在VSCode终端输入make进行编译,编译完成后会生成一个build文件夹,里面包含了.hex .elf和.bin文件。
输入make编译
编译完成
3.程序下载
在终端输入命令openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c "program build/VSCodeF4.hex verify reset exit"即可下载程序。
程序下载命令
关于下载器stlink.cfg和stm32f4x.cfg两个文件C:OpenOCDshareopenocdscripts文件夹中可以找到
配置文件路径
4.使用任务进行编译和下载
a.编译工程:按Ctrl+Shift+P,搜索task任务配置,选择配置任务,然后选择C/C++:gcc.exe生成活动文件
配置任务
C/C++:gcc.exe生成活动文件
进入tasks.json文件,删除和修改文件至如下图所示。
编译任务
b.程序下载:将编译任务复制一份,修改内容如下图所示。
程序下载任务配置
最后,在终端-运行任务,就可以看到配置的任务,选择相应的任务即可。
任务运行
5.调试
在VSCode中实现像Keil那样的调试,需要配置调试文件,点击左侧调试按钮。选择创建launch.json文件.
创建文件
然后选择自己的工程文件,再选择C++(GDB/LLDB),再选择默认配置。
创建完成后打开文件,删除如图所示内容,不要删多了。
接着点击右下角添加配置
添加配置
选择Cortex Debug: OpenOcd
增加和删除内容如下图所示。
SVD文件为单片机寄存器文件,加入这个文件才可以再调试时看寄存器的值,寄存器值变化可见需要在程序中打断点,才能看到寄存器值的变化。
关于stm32单片机的svd文件,可在keil的芯片包安装路径下找到。(安装了keil以及芯片包才能找到)
svd文件位置
六、支持C++编译
C++的编译需要修改Makefile文件。
1.添加CXX_SOUURCES
2.在GCC_PATH下添加如下两句代码(复制修改即可)
3.增加入下图三句代码(复制修改即可)
4.在该语句中间插入红框所示内容
5.增加C++的.o编译
经本人测试,修改了Makefile文件后,用CubeMX重新生成工程的时候,不会覆盖Makefile中修改和增加的内容;所以,不用担心配置的支持C++的代码会被覆盖掉。
七、总结
1.VSCode开发STM32,在界面上优于Keil太多了,但是在调试上赶不上keil,建议可以配合keil一起使用。
2.开发环境的搭建稍微有那么一点点繁琐,新手谨慎。
3.对于C++的支持,还是CLion要爽一些,CLion不需要自己去修改文件,只需要将需要编译的cpp文件包含进CMakeLists.txt文件就行,而VSCode中则需要增加和修改Makefile文件的内容,较为繁琐。
4.对于我个人说,用起来还是挺顺手的,重点是免费,开源万岁。
5.对于printf函数,keil重写比较简单,VSCode和CLion都比较复杂,可以参考其他的大佬的文章,这里我没有做研究
5.若想使用CLion开发STM32,可参考稚晖君知乎文章。在开头有链接,或者直接关注稚晖君知乎。
6.有空了B站出个此文章的视频。记性不好,写点文章做总结。