IOT_Links 拯救嵌入式利器!Vscode嵌入式完全集成,和Keil说再见


发现原因

每个电控佬都知道keil的界面看代码是一件多么反人类的事情
如果不是因为他的仿真能力还有一些别的功能,怕是很多人老早就不用了。
但是,我们不能将就!我们要做一个有底线的嵌入式程序员!
这里感谢营东的方法提供和建议,结合我个人的摸索,最终形成了这套完整的Vscode内嵌入式开发流程
编译,烧录,仿真一气呵成,全部在Vscode里面搞定,彻底抛开keil!

参考资料:

OpenOCD+cmsis-Dap初始化

Iot Links集成教程

Iot Links调试器设置

Dap-V2资料

Stm32—CubeMx中makefile原理解析

部分重要插件下载地址:

OpenOCD Download

CodeBlocks Download Site

Mingw Site

准备阶段

在开始工作之前,你们需要准备以下的东西(上文有提供下载地址):

  • mingw或者CodeBlock,总之有gcc集成在里面就行
  • OpenOCD库
  • 一份可爱的CubeMx生成的嵌入式代码(ToolChain/IDE选择为makefile)
  • 一个可爱的Vscode,带C/C++插件
  • 你的大脑和你的双手

手把手教学时间

一、准备一份CubeMX代码

  • 打开你的CubeMx,生成一份代码,一切按照正常情况配置。

  • 但是有一个地方需要更改的,就是在CubeMx的ToolChain/IDE选择界面

  • 将ToolChain选择为Makefile,然后按照正常情况下导出生成即可。

  • 如果可以的话,可以将Firmware Pac选择成为比较稳定的版本而不是最新版,防止由于版本不稳定出错而导致的debug的时候错误因素过多,难以排除的问题。

对应界面

二、Vscode下载插件iot Links,导入工程

  1. 打开Vscode,找到Adds(插件商店),搜索iot Links,并点击安装。
  • 在成功安装之后,iot会自动的帮你安装他自带的工具链,等待他安装好就好

  • 切记在安装的时候不要切换到其他窗口,不然有可能会丢包导致后面出问题!(因为我尝试的时候就因为这个原因丢包了)

  • 成功安装之后,Vscode会提示说让你重启,跟着步骤重启就ok了!

iot Links界面

  • 下载好后,点击Home回到iot主页面,点击导入GCC工程,将你生成的工程导入到Vscode中!

三、下载和配置OpenOCD库(如果你已经下载且配置好了请跳过这一步)

OOCD的库通过我上面给出的连接可以下载,下载好之后是一个压缩包。

OOCD界面

将压缩包解压缩后,是这样子的一个子目录,为了保持步骤的完整,请你将目录点到和我图片目录一致后再进行下一步。(接下来的步骤请认真跟着做

OOCD子目录界面

这里提供三种情况:

如果你使用的是CMSIS-DAP设备进行烧录:

  1. 进入bin目录,在此目录空白区域,右键+shift,选择在此处打开powershell。

右键打开powershell

  1. 在powershell界面输入一下两条中的一条,根据你调试的板子决定。
  • 注意,在进行此步骤之前,请将你的板子连着调试的设备接入你的电脑里面!
./openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg
./openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg
  • 若出现一下输出,就是配置失败,这是请检查一下你的烧录器是否被检测到。(随便开个工程看看即可),或者连接线是否有问题。
Error: CMSIS-DAP command CMD_INFO failed.
  • 若显示烧录器的info信息,则表明成功配置!

OOCD中DAP激活连接成功

  1. 在Vscode中点击Home,打开iot Links主界面,选择iot Link设置,选择调试器,选择OOCD。
  • 有两个参数需要你填入,一个是OOCD的路径,一个是OOCD的参数。

iot Link调试器设置

  • 请在OOCD路径填入你刚刚右键打开PowerShell的目录的地址,加上一个openocd.exe。
  • 请在OOCD参数填入你刚刚激活板子的两个命令中你使用的那一条,但是前面去掉./openocd。s
  1. 将以下的三个地址加入电脑的环境变量中:

这里的…代表你的实际OOCD地址,而不是直接复制到环境变量中,请注意!

  • …\share\openocd\scripts\interface (烧录器支持库)
  • …\share\openocd\scripts\target (硬件支持库)
  • …\bin(就是你刚刚右键的地方)

如果你使用JLink设备进行烧录:

请跳过这一步

如果你使用除此以外的设备进行烧录:

请等待后面的教程更新

四、下载和配置CodeBlock集成库(如果你已经下载且配置好了请跳过这一步)

  1. CB的集成库通过我上面给出的连接可以下载,下载好之后是一个exe,安装软件即可
  • 如果不是安装在默认地址的话,请务必记住你安装CB时候的安装地址!

  • 如果是默认安装地址,那么就是C:\Program Files (x86)\CodeBlocks

  • 打开安装好的地址,找到Mingw,并点入bin文件夹,复制你当前目录的目录地址

  • 将当前的目录地址加入环境变量

  • 找到mingw32-make.exe,复制一个副本,并改名为make.exe,放在当前文件夹

bin文件夹对应界面

  1. 回到刚刚导入工程的Vscode,选择.vscode文件夹里面自动生成的c_cpp_properties.json
  • 将”compilerPath”:更换成为刚刚复制的地址 + /gcc.exe

  • (当然你也可以用iot自带的默认的gcc,实际上只要你有gcc环境运行系统的或者他封装好给你的gcc都是一样的)

gcc编译器地址更改

  1. 在”defines”中将Keil编译器Debug中的C/C++上面的两个宏定义和四个基础宏定义填入。(不一定是两个,具体看你工程的情况)
  • 以我的板子为例,我用的是F427的板子,那么在keil里面对应的宏定义为USE_HAL_DRIVER和STM32F427xx,在这里填入即可。不知道宏定义是什么的可以打开keil找找自己初始化的宏定义。

  • 以我的板子为例,完全填入后为:

"defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE",
                "__CC_ARM",
                "USE_HAL_DRIVER",
                "STM32F427xx"
            ],

Debug宏定义

五、配置.iotlink环境变量

  1. 将以下的两个地址加入到对应的环境变量中:
  • (**…)为具体根据你电脑目前用户名决定(由于每个人用户名不同)。不能直接复制以下地址**)
C:\Users\...\.iotlink\tools\gcc-arm-none-eabi\bin
C:\Users\...\.iotlink\tools\gcc-arm-none-eabi\arm-none-eabi\bin

至此,全部配置完成。

开心测试功能时间

基础功能:编译、重编译、烧录

在Vscode的最底下可以找到对应的基本操作目录,对应如下:

操作界面

编译

  • 点击编译,如果出现编译耗时字样,则说明编译成功。

  • 首次编译时间会较长,但是实际上和keil差不多。

编译成功界面

重编译

  • 点击重新编译,和编译相同,等待后出现耗时字样说明编译成功。

  • 重新编译的时候,Vscode会把上一次的编译清理掉,请务必注意。

重编译成功界面

烧录

  • 点击烧录按钮,然后等待即可,出现烧录成功提示即烧录成功(本人基于DAP测试成功)!

  • 请记得打开板子电源烧录

烧录成功

调试

  • 调试功能要在Debug界面开启,iot自带了两个基础调试模式

Debug界面开启

  • Launch模式就是重新启动代码,在main前面停下来等待用户点击开始运行,和keil里面的仿真方法一样。

  • Attach模式就是启动了之后代码直接跑。

  • PS:Vscode无法动态调试,请养成打log的好习惯

  • 什么叫无法动态调试:就是你添加了一个断点查看全局,然后你单步运行,监听的变量值没变,断点只能显示当前时刻的值,运行之后无法看到!

  • 学会打log,能培养你debug啥能力,在赛场上或者运行过程也能也能分析你log的情况。

  • 下一篇有机会的话会写一些打Log的方法,敬请期待!

串口

  • 串口功能我还没尝试,以后会逐渐更新本教程!

makefile和keil里面配置的对应接口配置

为什么要写这个东西?

第一个是因为在实际操作中,我发现了当用户(也就是写代码的人)要添加客户文件的时候,我们需要更改cmake里面的一些东西,来达到我们目的。

老实说在写这段之前,我尝试过去理解和更改makefile里面的内容,最后终于成功的写出了客户添加用户代码的编译更改方法。

当客户添加一个.c/.h文件的时候:

首先,在添加的时候我们必须明白两点东西。

  1. 你的makefile在哪里?一般是在你的文件夹的第一层子目录。

  2. 我加的.c/.h文件的目录在文件的哪里?我等会要怎么做?

  3. 我要改makefile哪个地方的东西?

原理

请参考我上文给出的 “Stm32—CubeMx中makefile原理解析” 连接

关于.c文件

当用户添加一个.c文件的时候,我们需要将.c文件的完整地址添加到C sources列表下面。

C sources文件

假设,我在User文件夹新建了一个BSP_CAN.c文件,那么我在C sources文件列表下需要添加的东西就是:

User/BSP_CAN.c \

关于.h文件

当用户添加一个.h文件的时候,我们需要将.h文件的父级目录地址添加到C sources列表下面。

H sources文件

假设,我在User文件夹新建了一个BSP_CAN.h文件,那么我在H sources文件列表下需要添加的东西就是:

User \

PS:无论是C Sources还是H Sources在更新CubeMx的代码并生成的时候都不会被覆盖,只会在对应的列后面增加新的变量,所以无需担心被覆盖问题!!

最后

如果你觉得本教程对你来说非常有用:

  1. 分享给你身边的嵌入佬!大家一起Happy!

  2. 在文章的底下评论区写下疑惑和感想!我会根据疑惑和感想更新教程,谢谢你的反馈!


文章作者: AnshininTakaha
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AnshininTakaha !
评论
  目录