STM32Cube +VSCode开发环境搭建
0.前言
工欲善其事,必先利其器。由于受够了eclipse风格的cubeide,直接用vscode打开工程目录又是一大堆波浪线,所以终于下定决心整整我的开发环境。
一、各种方式对比
stm32开发环境有很多方式,由于一些原因,这里就不使用keil+vscode方式进行介绍了,相关教程各大论坛也有不少,这里就介绍一下我踩坑的几种。环境搭建的宗旨是简单,尽量减少自己修改配置文件等繁琐步骤。
1.STM32CubeMX + CLion
Clion作为比较现代化风格的IDE工具,并且支持像vscode风格的插件,用起来还是比较舒适的,不过缺点就是调试只能用openocd,这种方式需要加载芯片相关的cfg文件和寄存器映射表,所以搭建环境时还是比较麻烦的。笔者最终没有使用这种方式,因为所使用的STM32F103RCT6找不到对应的cfg文件和寄存器映射表文件,又懒得自己照着手册写。如果有想用这种方式的可以移步B站@Kevin_WWW大佬的相关视频。
注:这种方式最好使用官方能找得到芯片cfg文件的开发板,否则自己手动配置起来比较麻烦。
2.STM32CubeIDE + VSCode + STM32 VSCode Extension
ST官方出了一个VSCode的相关插件,使用此插件可以直接打开对应的工程,支持编译下载和调试功能,本节内容主要也是以此方式介绍。
注:使用此方式前最好先在CubeIDE中查看自己的ST-Link是否满足要求,有些国产ST-Link过不了IDE检测,就无法正常烧录和调试。
3.VSCode + EIDE插件
由于笔者的两个ST-Link都无法过检测,又不想再花钱买新的,所以最终选择使用EIDE这种方式,使用起来甚至比第二种还要方便一点,相关教程可以移步同站
@怠呆
大佬的《Windows VS Code + EIDE arm-none-eabi-gcc 开发STM32》。
二、STM32CubeIDE + VSCode + STM32 VSCode Extension环境搭建
1.需要安装的软件
① STM32CubeIDE
② VSCode
③ cmake
④ STM32 VSCode Extension(vscode插件)
①和②的安装就不多介绍了,官网下载后安装就行。STM32CubeIDE建议安装在默认路径下,可以省去后续配置麻烦。更换了目录也行,笔者就是更换了目录后重新配置的,后续会介绍。
③ cmake的安装可以从官网下载安装包直接安装(记得勾选添加到环境变量,后续会更方便),也可以下载免安装.zip格式的文件。不想添加环境变量的话后续就要在VSCode中配置,看个人喜好。
2.相关配置
在vscode中安装STM32 VSCode Extension 插件,添加后左侧会出现如下标志,并且此插件会安装cmake、Cotex-Debug等其他需要依赖的插件。
添加cmake工具路径:
如果安装cmake时没有添加到环境变量,或者只下载了工具压缩包,那么就需要在vscode中指定相关路径。在vscode中使用ctrl + shift + P,搜索
cmakepath
,将相关路径添加即可:
配置STM32CubeIDE工具链:
在左侧STM32插件中导入一个CubeIDE生成的工程,然后修改如下文件:
注:如果STM32CubeIDE安装在默认路径下,应该不需要修改此路径,请以实际情况为准
将launch.json中这四项参数修改到CubeIDE安装目录下的对应路径。
.cmake 文件中一项参数也需要修改:
此项是用来加载交叉编译工具的,使用CubeIDE包内自带的交叉编译工具链即可。
3.编译测试
修改完这些参数正常情况应该就可以编译了,不过烧录和debug就需要自行解决了,由于ST-Link 的问题,尝试了很多种绕过检测的办法都没有奏效,感兴趣的可以参考此篇文章进行尝试:https://github.com/armink/HackSTLinkUpgrade .经过笔者尝试,应该只有1 和 3有尝试空间了。
点击左侧cmake工具中的构建按钮就可以编译工程了。左侧的运行按钮中可以对程序进行debug操作,这里就不演示了,有需求的可以自行研究。
三、总结
官方的工具和插件虽然用起来方便快捷,但是捆绑st-link的情况比较严重,使用Jlink或者DAPLink的只能用openocd这种方式,加载芯片cfg文件和寄存器映射表也比较麻烦,不能做到每次都方便快捷的开始。Keil和IAR工具的界面一言难尽,所以只能寄希望于一些第三方平台的优化了,在此期间笔者还接触到PlatformIO的开发方式,可以直接兼容C++的类库及面向对象的编程模式,感兴趣的可以继续了解,笔者就先停在EIDE的开发方式了。
版权归原作者 Amonter 所有, 如有侵权,请联系我们删除。