打印
[其他ST产品]

VSCode搭建STM32开发环境(极简自我搭建&懒人直接使用插件)

[复制链接]
6129|56
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

[color=var(--md-editor-text-color-active)]一开始是用STM32CubeMX+Keil进行STM32的学习和开发,但是keil的界面属实有点丑。。最开始甚至有点把我劝退。抛开颜值不说,这货的代码补全功能有点菜,很多时候都不显示keyword的提示,至少在我的电脑上是这样,极个别时候倒是还反应挺快。

[color=var(--md-editor-text-color-active)]于是便想要用颜值高而且代码补全功能比较强大的vscode来进行STM32的开发。而且无论何种开发都用一个工具也比较方便。看了一些别人的博客,在这里汇总一下,也算做个笔记。

[color=var(--md-editor-text-color-active)]本教程思路为:使用STM32CubeMX生成Makefile工程(STM32CubeMX自动进行初始化配置实在太香了,应该也是目前stm32开发的主流),然后使用vscode对工程进行编写,编译和烧录。

[color=var(--md-editor-text-color-active)]总算抽出时间写完了,累死了...



使用特权

评论回复
沙发
无法去污粉|  楼主 | 2023-1-31 16:10 | 只看该作者
写在前面:
方法二所使用的使用ioT Link插件的方法已经不推荐使用,因为方法二是我很久以前写的,已经太久没有维护,不知道现在是个什么状况,事实上在我写完这篇文章的方法二部分之后我就再也没用过这个方法了。。

其次我个人也更倾向于使用方法一,因为方法一尽可能少的使用VSCode插件,仅仅利用VSCode的强大编辑功能,再通过VSCode调用简单的命令行命令去完成后续的编译烧录等,事实上和方法二的内在原理是一样的,只不过方法二会自动帮你下载需要的工具,也会帮助你调用它们。我觉得方法一比方法二要优雅的多,但不可否认的是方法二确实对新手更友好一些,不过方法一每一步的配置过程和内在的原理我已经写的很清楚了,还是希望大家即便是新手也尽可能使用方法一吧,方法二的内容我就先不删除了,虽然很可能已经过失,但或许也能给各位一些帮助。

使用特权

评论回复
板凳
无法去污粉|  楼主 | 2023-1-31 16:16 | 只看该作者
方法一:arm工具链+OpenOCD烧录
1.大致思路
使用STM32CubeMX生成工程,生成时选项选择生成Makefile,通过make调用arm工具链编译,然后通过OpenOCD烧录。

通过写c_cpp_properties.json可以利用VSCode牛X的IntelliSense,可以很爽的写代码。通过task.json方便的完成编译和烧录功能,通过写launch.json以正确进入调试。

此外,也可以正常生成MDK或其他工程,然后vscode只写c_cpp_properties.json,这样的目的是用vscode写代码,用MDK编译和烧录,防止玄学问题发生。

使用特权

评论回复
地板
无法去污粉|  楼主 | 2023-1-31 16:17 | 只看该作者
比如我目前没有解决的一个问题是H7的dma问题。看了其他人的博客,是因为dma使用了不该它使用的内存地址,但是用MDK的话官方生成的工程已经帮你把地址规定好了,是可以正常使用的,用arm工具链编译的话我还不清楚在哪里修改这个地址,仅在代码里定向这个地址的话又不好使....有小伙伴解决了的话欢迎评论区或私信告诉我一下;)

使用特权

评论回复
5
无法去污粉|  楼主 | 2023-1-31 16:18 | 只看该作者
准备工具

使用特权

评论回复
6
无法去污粉|  楼主 | 2023-1-31 16:20 | 只看该作者
安装工具
安装不细说了,记得把MinGW-w64,OpenOCD,arm-none-eabi-gcc,Git添加到环境变量。

桌面右键点击此电脑->属性->高级系统设置->环境变量->Path->编辑->新建->浏览,选择对应的路径(到bin文件夹),最后应用->确定。

参考图:

使用特权

评论回复
7
无法去污粉|  楼主 | 2023-1-31 16:21 | 只看该作者
补充说明
(3)MinGW-w64:Version版本号,选最新即可;Architecture架构跟操作系统有关,64位系统选择x86_64,32位系统选择i686;Threads线程标准windows开发选win32,其他选posix;Exception异常处理模型,x86_64可选为seh和sjlj,i686为dwarf和sjlj,一般选seh和dwarf就可;Build revision构建版本号,选择最大就可。

(6)Git:原本以为不能用powershell。。。虽然自己也觉得这不可能,但是一开始确实遇到了问题,不过现在姑且已经解决了。用git-bash的话方便一些,powershell的话有些地方要改一下,而且不如用gitbash快,主要体现在执行task时会卡一卡。关于这个地方其实我也不是很懂,不知道有没有其他方法解决,有的话欢迎评论区或私信提醒。:)

(6)Git:后面文章已经彻底改成使用windows的powershell了,本文的宗旨是尽可能减少额外的操作,能用原生的就不下载新的。

使用特权

评论回复
8
无法去污粉|  楼主 | 2023-1-31 16:22 | 只看该作者
使用STM32CubeMX创建工程
前面选芯片,配置外设时钟等等正常配就好,要生成工程前点击Project Manager,在Toolchain/IDE处选择Makefile。

然后直接GENERATE CODE。

使用特权

评论回复
9
无法去污粉|  楼主 | 2023-1-31 16:23 | 只看该作者
4.VSCode内部配置
首先在VSCode中打开刚才的工程文件夹。

直接按F5,选择C++(GDB/LLDB)->gcc.exe生成活动调试文件,然后会自动生成.vscode文件夹,当然啦,会报错,点中止就可以了。

使用特权

评论回复
10
无法去污粉|  楼主 | 2023-1-31 16:26 | 只看该作者
添加并配置c_cpp_properties.json
(1)在.vscode文件夹中添加c_cpp_properties.json文件,配置了这个,VSCode才能找到includePath,写代码的时候才不会一堆红波浪线。它的基本格式是这样的:
{
    "configurations": [
        {
            "name": "Win32",
            "browse": {
                "path": [

                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [

            ],
            "defines": [

            ],
            "compilerPath": " ",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

使用特权

评论回复
11
无法去污粉|  楼主 | 2023-1-31 16:29 | 只看该作者
把鼠标放在对应的参数上可以看到vscode对其的解释,比如把鼠标放在path上:

使用特权

评论回复
12
无法去污粉|  楼主 | 2023-1-31 16:29 | 只看该作者
首先我们看"defines",这个是告诉VSCode你预先定义了哪些宏,怎么知道这里应该填什么呢?打开目录下的Makefile文件便可以看到:

使用特权

评论回复
13
无法去污粉|  楼主 | 2023-1-31 16:30 | 只看该作者
忽略前面的-D,我们便可以知道预先定义的宏是"USE_HAL_DRIVER"和"STM32F407XX"。(一般来说一定是这两个,其中第二个就是你的芯片)

再看"includePath",这个是告诉VSCode去哪些目录里找头文件,怎么知道这里应该填什么呢?同样,打开目录下的Makefile寻找: 忽略前面的-I,将后面的路径填入即可。(或者可以直接偷懒填"${workspaceFolder}/**",其中workspaceFolder表示当前目录,**表示该目录下递归遍历所有文件)

至于"path",似乎不是很重要,和上面的"includePath"填一样的或者填"${workspaceFolder}/"即可。

使用特权

评论回复
14
无法去污粉|  楼主 | 2023-1-31 16:31 | 只看该作者
最后是"compilerPath",显然是填编译器路径,把MinGW-w64下的gcc的路径填进去就可以了,例如我的是这样:"D:\\Programming\\mingw64\\bin\\gcc.exe"。

至此,至少VSCode智能提示和代码补全功能就工作正常了,可以正常的写代码。虽然还不能编译烧录和调试,不过VSCode编辑+Keil编译烧录调试也是不错的选择(毕竟Keil的编辑功能实在是不好用,界面也丑)。

使用特权

评论回复
15
无法去污粉|  楼主 | 2023-1-31 16:42 | 只看该作者
最后大致是这个样子:
{
    "configurations": [
        {
            "name": "Win32",
            "browse": {
                "path": [
                    "${workspaceFolder}/"
                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "USE_HAL_DRIVER",
                "STM32F407xx"
            ],
            "compilerPath": "D:\\Programming\\mingw64\\bin\\gcc.exe",//编译器路径
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

使用特权

评论回复
16
无法去污粉|  楼主 | 2023-1-31 16:44 | 只看该作者
4.2添加settings.json
在.vscode文件夹中添加settings.json文件,添加:
{
    "terminal.integrated.shell.windows": "D:\\Programming\\Git\\bin\\bash.exe"
}

这样便指定了该文件夹下默认shell是bash,出现提示的时候选择允许改变即可。

使用特权

评论回复
17
无法去污粉|  楼主 | 2023-1-31 16:44 | 只看该作者

[color=var(--md-editor-text-color-active)]vscode更新后已经不推荐使用这种方法

[color=var(--md-editor-text-color-active)]

[color=var(--md-editor-text-color-active)] 目前虽然会警告,但仍然可以使用,而且比新方法优先级更高,也就是说目前继续使用此方法不会有任何问题,暂时


使用特权

评论回复
18
无法去污粉|  楼主 | 2023-1-31 16:51 | 只看该作者
新方法如下:

点击左下角小齿轮进入设置,在上方搜索栏搜索terminal default,然后点在settings.json中编辑

使用特权

评论回复
19
无法去污粉|  楼主 | 2023-1-31 16:52 | 只看该作者
总之只要能把全局的settings.json打开就行。

使用特权

评论回复
20
无法去污粉|  楼主 | 2023-1-31 16:53 | 只看该作者
到这个位置:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

761

帖子

1

粉丝