你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32开发之 VSCode+gcc环境编译

[复制链接]
STMCU 发布时间:2020-10-10 10:21
STM32开发之 VSCode+gcc环境编译


一、程序安装
1、VSCode:
https://code.visualstudio.com/Download
好用到爆的文本编辑器,配合强大的插件,使你的开发效率大大提高。
2、Java:https://www.java.com/zh-CN/download/
STM32CubeMX的安装需要 JAVA运行环境(jre)。
3、STM32CubeMX:https://my.st.com/content/my_st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html
支持最新的 HAL库及 LL库,工程代码配置与生成工具,支持生成 IAR、Keil、STM32CubeIDE、Makefile等工程,这里使用其生成的 Makefile工程。
4、MinGW-w64:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
一个强大并实用的 C/C++ 编译器。安装完成后需要添加系统环境变量,可以利用 cmd命令:gcc -v测试。
5、arm-none-eabi-gcc:https://launchpad.net/gcc-arm-embedded/+download
GUN的 arm的通用交叉编译链工具,基本上常用的 arm处理器均支持。同样的,安装完成后需要添加系统环境变量,可以利用 cmd命令:arm-none-eabi-gcc -v测试。


二、CubeMX工程生成
目前 STM32现在主推的库是 HAL库,当然还有个 LL库用于操作底层寄存器;对于 HAL库,官方专门推出了图形化软件 CubeMX来简化 HAL库下 STM32的初始化代码;我们只需要配置好相应的外设功能以及时钟树,点击生成代码,CubeMX便会生成相应工程文件,并且还支持多种 IDE工具,实乃居家旅行出门必备啊。咳,偏题!

首先,选择你的目标芯片,启动工程配置,这里就简单的弄个 LED控制跟 DEBUG配置。
串口配置就像下图那样,像我们平常一样,异步通讯,Baud rate:115200、8Bit、1Stop Bit
2.png
接着就配置 LED IO引脚,直接点击对应引脚进行配置,如下图所示:
3.png
这软件怎么用在这里就不多赘述了,还有就是稍微注意一下:
如果要使用 STLink等在线调试器,那么需要在下图的指示处选择你所需要调试方式:
4.png
对于时钟树,像我们一般是有使用 HSE高速外部晶振,那么你就需要在 RCC那里打开相应的配置:
5.png
接着在时钟配置那里配置相应的外设时钟:
6.png
最后,由于我们是想要在 VSCode上开发,就直接选择生成 Makefile就可以了。需要特别说明的是,这一步并不是必须的,完全可以不用 CubeMX,自己写 Makefile也是可以的。然后输出生成工程文件。
7.png
三、VSCode环境部署


1、插件安装
8.png
2、配置 VS Code
首先,把从 STM32CubeMX创建出来的工程导入到 VS Code里面,得到:
9.png
默认情况下,工程中是不含 .vscode 的文件夹的,通过操作以下三种方式时会自动创建:
打开命令窗口进行编辑配置(Ctrl+Shitf+P > Edit Configurations(JSON))
10.png
或点击窗口栏的 终端 -> 配置任务 -> 使用模板创建 task.json -> Other
11.png
或修改工作区里的 settings.json文件(窗口File--Preferences--Settings--Features--Terminal 的 Terminal > Integrated > Automation Shell: Windows栏中进行编辑)
12.png
这三个创建出来的效果如下:
13.png
先说前面两个文件:
c_cpp_properties.json
主要有添加 include路径,编译器路径,宏定义等;设置好后,索引、编译就跟 keil一样方便。然后,它的配置修改如下:
  1. {
  2.    "configurations": [
  3.       {
  4.            "name": "STM32",// 创建一个名为"STM32"的配置
  5.            "includePath": [// 声明这个工作区的 C/C++工程包含了哪些头文件目录
  6.                "${workspaceFolder}/**",
  7.                "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32L1xx/Include",
  8.                "${workspaceFolder}/Drivers/CMSIS/Include",
  9.                "${workspaceFolder}/Drivers/STM32L1xx_HAL_Driver/Inc",
  10.                "${workspaceFolder}/Drivers/STM32L1xx_HAL_Driver/Inc/Legacy",
  11.                "${workspaceFolder}/Core/Inc"
  12.           ],
  13.            "defines": [// 全局的预处理宏定义
  14.                "STM32L151xB",
  15.                "USE_HAL_DRIVER"
  16.           ],
  17.            "compilerPath": "gcc.exe",// 如果添加了环境变量,可以像这样表示;否则就得加绝对路径,如:C:\\Program Files\\mingw64\\bin\\gcc.exe
  18.            "cStandard": "c11",// 使用的 C标准
  19.            "cppStandard": "c++17",// 使用的 C++标准
  20.            "intelliSenseMode": "gcc-x64"// 语言风格
  21.       }
  22.   ],
  23.    "version": 4
  24. }
复制代码


注意:这个 json不允许有注释,所以,如果是像复制到你的文件里,记得把注释删了。
tasks.json
这个文件下 tasks 数组里的每一个对象都代表着一个任务。
  1. <font size="3">{
  2.    // See https://go.microsoft.com/fwlink/?LinkId=733558
  3.    // for the documentation about the tasks.json format
  4.    "version": "2.0.0",
  5.    "tasks": [
  6.       {
  7.          "label": "Build",// 标签名
  8.          "type": "shell",// 终端(shell)型的任务
  9.          "command": "make",// *执行的命令
  10.          "args": [// 命令的参数
  11.            "-j6"// 表示六线程同时编译
  12.         ],
  13.          "problemMatcher": ["$gcc"],// 表示如果出现了编译报错,问题面板会显示 gcc类型的错误
  14.          "group": {
  15.            "kind": "build",
  16.            "isDefault": true
  17.         }
  18.       }
  19.     ]
  20. }</font>
复制代码


注意:上面的 "command"选项中填的是 "make";实际上,在我们下载的 MinGW-w64编译器中,执行的是 mingw32-make.exe;但是,这里可以看到 mingw32-make.exe 文件名太长,并且不好记,因此我们可以将其复制并重命名为 make.exe 这样就与 Linux下的 make命令保持一致了;如果没有像前面说的那样复制出 make.exe,那么,在 "command"选项中填则是 "mingw32-make",同样的在执行编译操作时,键入的命令则是 mingw32-make。
settings.json
这个留着后面结合实例来说。


四、工程编译
当你配置完成上面的操作后,最最最好就是先保存所有文件,然后关闭 VS Code,再重新打开工程。

编译有两种:
1、点击窗口栏的 终端 -> 运行生成任务(快捷键 Ctrl+Shitf+B)
14.png
2、点击窗口栏的 终端 -> 新终端,选择 cmd
15.png
没有的话,那就点击一下它,然后点 “选择默认 Shell”,再点击旁边的垃圾桶,再重新打开一下。
键入 make,最后按回车键。当编译完成后就会像下图这样显示编译文件大小:
16.png
五、编译清除
编译文件清除,只需要在终端命令台里键入 make clean就可以了,但是,但是,如果使用的是 cmd的shell,你会发现:

并没有清除掉编译出来的文件。这是为什么呢?可以在这里得到答案:https://github.com/STAT545-UBC/Discussion/issues/55
根据里面的描述可以总结为:
解决方法1:使用 Windows版本的 rm是 del,因此可以简单地用 rm替换成 del。但是要注意,这样做意味着您将无法使用 Git Bash shell,因为它不支持 del命令程序;
解决方案2:假设你已安装 Git Bash(没有那就安装 Git呗,都 0202了,不会还有人不用 Git吧,实在实在不想用 Git,那么就找个支持 rm的终端命令台,例如:msys2),那么你可以把终端命令台切换到 Bash上面
第一个就简单了,在 makefile里把 rm替换成 del,如下图所示:
17.png
第二个,就像上面那样重新点击 “选择默认 Shell”,然后选择 Git bash
18.png
19.png


然后,用这种操作去修改终端 Sell,不同项目对于选择不同的终端,有时候需要经常切换,不方便;那么就有了工作区 settings.json文件配置的作用了。
在 settings.json文件中,我们只需要配置如下操作:
  1. {
  2. /* 终端在Windows上使用的shell的路径 */
  3.    "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",// 如果添加了环境变量可以去掉路径
  4.    "terminal.external.windowsExec": "C:\\Program Files\\Git\\bin\\bash.exe"// 与上面同理
  5. }
复制代码


如此一来,那么就只在该项目工作区内产生作用效果。
你看,颜色都不一样的:
20.png

收藏 1 评论1 发布时间:2020-10-10 10:21

举报

1个回答
likang1202 回答时间:2020-10-12 09:03:30
谢谢分享

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版