VS Code简介
Keil-MDK是一款老牌的嵌入式开发工具,且作为ARM的亲儿子,其自带ARMCC在编译与调试方面上较gcc有所优势,却因其过于简陋的UI与极为不便的代码编写方式令新生代的程序员们无法接受。而VScode作为一款简洁且高效的代码编辑器,同时支持诸如调试,任务执行和版本管理之类的开发操作,集成了所有一款现代编辑器所应该具备的特性,包括语法高亮、可定制的热键绑定、括号匹配、以及代码片段收集等,使用它编码不仅心情舒畅,且效率倍增。本教程面向新人提供了使用VScode来编辑、编译、烧录、调试代码的方法,操作简单可行。
准备工作
第一步(前提):安装Keil与VScode
Keil官网(正版需要付费,懂的都懂): Keil Embedded Development Tools for Arm, Cortex-M, Cortex-R4, 8051, C166, and 251 processor families.
VSCode官网: Visual Studio Code - Code Editing. Redefined
第二步(编译):安装VSCode插件
1.C/C++
2.C/C++ Extension Pack
3.C/C++ Themes
4.Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
5.Embedded IDE
6.Cortex-Debug (ARM调试插件)
7.vscode-icons
第三步(烧录):安装JLink驱动
JLink官网有Jlink的官方驱动:J-Link Debug Probes by SEGGER – the Embedded Experts
第四步(调试):安装arm-none-eabi-gdb
GNU的官方工具链下载网站上有arm-none平台的工具链下载链接:Prebuilt GNU toolchain for ARM (gnutoolchains.com)
配置VScode适配C51与MDK开发环境
C51:
安装完上述插件后后重启VScode,并按照下图进行工具链选择与配置,该步骤仅需在安装EIDE后配置一遍即可,以后不用反复配置。
配置完毕后选择新建项目(此处以开发C51为例),依次选择“空项目->8位MCU项目”,并输入该项目文件夹的名称和路径,此处选择在桌面事先建立的名为"Test"的文件夹。并在该文件夹中分别新建名为“src”和“inc”的文件夹分别存放.c文件和.h文件。
回到Vscode,修改构建配置为C51 Compile(编译器在每次新建工程时需要手动修改)。
展开“项目资源文件夹”,点击旁边的文件夹图标,选择“普通文件夹”,从资源管理器中选择src和inc文件夹将它们添加到项目资源中。
展开“项目属性”,并将inc文件夹添加到包含目录,从而完成对.h文件的包含。
切换至工作区,选择要打开的.c文件,可以看到vscode已经自动使能了自动补全与代码高亮的功能,能够据用户的输入预测可能的函数名与变量名,是Keil中所不具有的。
再将光标放在头文件上,按下“F12”,即可以实现头文件秒跳转,或按“Alt+←”可回到光标上一时刻所在的位置,“Ctrl+/”即可快速注释或解开注释,是不是比用Keil开发的手感好上了不少!除此之外,我们还可以直接在VScode中对该项目进行源码编译。
可以在项目资源的Output Files文件夹中找到项目对应生成的Hex文件,当然,通过串口烧录工具或指定Shell也可以实现程序的一键烧录。
至此,C51下用VScode代替Keil的方法已经实现,接下来介绍如何用VScode实现基于ARM Cortex-M的单片机开发。
MDK:
如果你的电脑上已经安装Keil MDK,那么你可以在Keil的安装目录下找到ARM->ARMCC文件夹,其对应的是我们开发STM32F1时常用到的AC5编译器(实际上已经落后),打开里面的bin目录可以找到如下图所展示的工具:
其中:
- armasm为汇编器,用于汇编程序
- armcc为编译器,用于编译源代码文件
- armlink为链接器,用于连接各程序段
- fromelf可用于从elf文件中提取反汇编代码、生成二进制文件等
- armar主要用于从.a和.lib文件中提取信息
各个工具的具体用法可参照ARM官方说明。我们只需要知道可用的ARM编译器所在路径为C:\Keil_v5\ARM\ARMCC\bin,再次配置编译工具链,不同于之前的C51选项,本次设置ARMCC编译器所在路径如下图
直接导入Keil5工程
选择好编译工具链后可以直接打开已有的Keil-MDK工程,点击左侧的“导入项目”,并选择“MDK”,找到文件夹中的Keil工程后点击“Import”,此时右下角若有弹窗提示“是否与原有Keil项目共存于同一目录下”,可根据自身情况选择,选择完毕后切换入新工作区。
可以看到很多报错,不要急,点击右下角的“允许EIDE为此文件夹配置IntelliSense”,报错消失。
切换至“EIDE”分页并查看工程配置,可以发现与Keil中的配置的一致,且跳转、自动补全功能都已经可以实现。
通过EIDE建立新的项目模板
点击新建项目,依次选择“空项目->Cortex-M 项目”,并输入该项目文件夹的名称和路径,此处选择在桌面事先建立的名为"STM32_TEST"的文件夹,并在文件夹中移植好STM32F10x所适用的标准库函数。
其中User目录存放用户应用代码,System目录存放板级驱动程序,STARTUP目录存放启动文件,Libraries目录存放STM32的标准库函数。此处以STM32F103VET6为例,工程的编译工具链选择AC5,“芯片支持包”通过“From Disk”选项找到位于本机的对应芯片型号的Pack。
注意:已经在Keil-MDK中安装过的芯片包一般位于Keil安装目录下的ARM\PACK.Download目录下。
添加完相应的PACK之后,再展开分支选择对应的芯片型号。
最后在预处理选项中添加“USE_STDPERIPH_DRIVER”项
没有问题后按下快捷键F7成功编译,可以发现成功输出了bin文件与hex文件。
至此,通过VScode对ARM搭建工程进行编辑与编译的任务已经完成,下面介绍VSCode如何取代Keil对编写的ARM裸机代码进行烧录与调试。
烧录
点开EIDE的烧录配置选项,可以看到这里支持的有JLink,STLink,OpenOCD等,此处就以Jlink为例进行烧录配置。
在使用JLink烧录前需要安装JLink驱动,否则电脑无法识别到Jlink,驱动程序可以在JLink的官网下载到,详情见文章开头的准备部分。
回到工程配置页面,选择烧录配置为JLink,再展开烧录配置,选择芯片名称为STM32F103VE
连接电脑、JLink与开发板,按下快捷键Ctrl+Alt+D,即可进行程序烧录。
调试
转到EIDE插件的设置界面,找到Axf To Elf选项,将其勾选,这样就得到了GDB调试时所需要的文件类型。
再打开Cortex-Debug插件的设置页面,搜索Arm Toolchain Path项,将ARM Toolchian Path的路径修改为gcc-none-eabi工具链中的bin文件夹所在路径
再搜索jlink关键字,将JLink GDBServer Path的路径修改为Jlink GDBServer所在目录
修改完后的json文件如图所示
此处的JLinkGDBServerPath中需要包含JLinkGDBServerCL.exe文件本身。编辑完成后按下Ctrl+s保存json文件,并按下快捷键F5即可进入调试模式。
可以看到左侧的变量信息与寄存器信息应有尽有,按下F10可以单步跳过,F11单步跳入,断点信息也比Keil列举清晰的多。