VS|VS code+openocd+make+gcc开发stm32

一、下载软件:
1、VS code;VS cpde安装的时候直接添加到path,如图所示:
VS|VS code+openocd+make+gcc开发stm32
文章图片

安装完成后,该软件的商店中安装,如图插件(chinese那个也可以安装,安装之后VS code就是中文界面):
VS|VS code+openocd+make+gcc开发stm32
文章图片

2、openocd(open on-chip debugger),下载后解压,然后将openocd-0.10.0文件夹下级中的bin和bin-x64两个文件的完整目录添加到电脑的环境变量中(右键”我的电脑-属性-高级系统设置-环境变量-用户变量的path中“);
3、make,下载解压后将bin中的mingw32-make.exe重命名为make.exe;然后和openocd一样将make.exe所在完整目录添加到环境变量中;
4、gcc(GNU Arm Embedded Toolchain(arm-none-eabi))编译器,这是个.exe文件,安装完成后,和上面两个一样将bin文件夹的完整路径添加到环境变量中;
5、STM32CubeMX,这个软件要依赖java环境,所以需要先安装java,就是常规软件的安装方法;
6、ST_Link的驱动(有就不用装了),在设备管理器中查看(插上ST-Link的时候);
相关软件分享:链接:https://pan.baidu.com/s/1OPb0iyK2fjoHdiY8G01QKw
提取码:7ekh
测试工程文件分享,使用原子哥的战舰板:链接:https://pan.baidu.com/s/1ioV6c4V9eFThxCDVkuycCQ
提取码:trfn
qq:1513781014
二、验证是否安装成功以及环境变量添加成功
make -v
openocd -v
arm-none-eabi-gcc -v
如果成功了,如下所示:
VS|VS code+openocd+make+gcc开发stm32
文章图片

三、配置
1、STM32CubeMX生成makefile的工程,这个不做介绍(可以使用我的工程)
2、配置VS code:
1)打开VS code,然后打开工程文件夹,然后文件-首选项-设置-在搜索框输入:intelli sense mode,在下拉选项中选中gcc-arm,指定intellisensemode的默认值;
2)选中工程文件的文件,然后按F1(ctrl+shift+p),输入编辑配置UI;a、在定义栏中添加:__CC_ARM(不添加这个也没有问题)、USE_HAL_DRIVER、STM32103xE(后面两个在makefile文件中大约102行中,但是多加了-D,如果复制别忘了删除-D),添加完按ctrl+s保存,不然相当于没有添加;b、添加头文件路径,在包含路径中,每个用到的.h文件的路径,包括自己编写的,ctrl+s;同时makefile中的C_INCLUDE(大约在112行)也要添加,按照已有格式添加其中每个 \后面不能有空格、makefile文件中代码前面有的空白的话,它是制表符(Tab)而不是空格,Ctrs+s;c、编译器路径选择,刚刚修改的make的路径中的gcc.exe(如果解压在c盘就是C:/mingw64/bin/gcc.exe)
3、重启vs code打开工程文件夹,可以简单测试一下代码提示,以及语法检查是否正常,如果不能提示就在设置界面搜索prevent,然后取消勾选;可以在下方终端(在工程文件夹)输入make,看一下是否能编译输出.hex、.elf、.bin等文件,如果不能编译检查步骤2中的c中编译器路径;使用st-link连接单片机和电脑,然后在终端中输入openocd,如果出现如下,则证明与单片机通讯成功:
VS|VS code+openocd+make+gcc开发stm32
文章图片

4、调试配置:
1)可以在工程文件下新建一个openocd.cfg,同时在其中添加source [find interface/stlink-v2.cfg](表示使用st-link),
source [find target/stm32f1x.cfg](表示是f1系列芯片),不新建也可以;
2)点击VS code左侧的运行图标;
3)点击创建launch.json,然后在弹出创建窗口选择Cortex-Debug,将launch.json配置成如下图所示:
VS|VS code+openocd+make+gcc开发stm32
文章图片

5、配置到此可以使用make命令编译工程了,当然也可以调试了,但是没有调试结束后需要手动复位,不能自动复位,也不具备一键下载,和编译;实现一键编译、一键下载,调试前自动编译、调试后自动复位:a、在makefile文件的最后新建两个任务update(实现烧录)、reset(实现复位),如果之前没有新建openocd.cfg就是用#屏蔽update后面的两行,并将其下面的两行取消屏蔽,其代码如下图所示:
update:
openocd -f openocd.cfg -c init -c halt \
-c "program $(BUILD_DIR)/$(TARGET).hex verify reset exit"
VS|VS code+openocd+make+gcc开发stm32
文章图片

其中openocd -f openocd.cfg相当于打开,init为初始化,halt为挂起,为了烧录做准备,(每个 \后面不能有空格、makefile文件中代码前面有的空白的话,它是制表符(Tab)而不是空格),program为烧录命令,vreify为烧录后验证,这个可以参考openocd的手册,FLASH Programming,配置完成后ctrl+s保存;b、按F1,输入配置任务选择gcc.exe build active file,打开tasks.json后配置成如下图所示:

{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build",
"command": "make",

"problemMatcher": [
"$gcc"
],
"group": "build"
},
{
"type": "shell",
"label": "Update",
"command": "make; make update",

"problemMatcher": [
"$gcc"
],
"group": "build"
},
{
"type": "shell",
【VS|VS code+openocd+make+gcc开发stm32】"label": "Reset",
"command": "make reset",

"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
VS|VS code+openocd+make+gcc开发stm32
文章图片


上图中的command的make;make update 代表先执行编译,再执行makefile中的update;make reset就是makefile中的reset命令;c、为了然后每次调试都自动编译、自动复位,在launch.json添加最后两行代码如步骤4的3)所示;
6、在VS code的菜单栏点击终端-运行任务就会看到Build、Update、Reset(分别为编译,编译后烧录,重启);
结束语:
感谢网上大神上传的方法,基本学习https://www.bilibili.com/read/cv6165143/这位大神,添加了自己在这个过程踩过的坑,希望大家能多多分享,谢谢

    推荐阅读