STM32高级开发(18)-使用VS Code搭建STM32开发环境

发布者:心若清泉最新更新时间:2019-07-31 来源: eefocus关键字:STM32  Code  开发环境 手机看文章 扫描二维码
随时随地手机看文章

以前在伴随着开发平台的转换中,我尝试过各种各样的开发环境,而在最近一段时间的开发中我使用了Visual Studio Code来作为代码编辑器,其优异的工程管理,超快的启动速度,各种各样功能强大的插件,使我立刻爱上了这个文本编辑器。但是在开发中来来回回在编辑器和Keil等IDE之间来回切换对我造成了不少不方便,另外由于希望能够在windows下使用gcc工具链开发,所以我尝试使用插件来完整的在vscode上搭建了一个开发环境。可以说这是我在windows平台下尝试过的最好用的一种搭配,下面我就来详细讲述一下这个环境的搭建和基本使用方式。


ps:启动真心快,在win下优化程度堪比记事本.


安装软件

下载安装 Visual Studio Code


过程按照正常方式安装就可,记得在安装快完成后的选项中勾选,添加右键打开文件和文件夹的选项,把有选择的那页全部勾选就行,这样就可以很方便的在文件夹目录下快速用VS Code打开文件或工程目录了。


下载安装 Clang


用于提供语法补全代码格式化等功能,正常完成安装后将软件的安装目录下的bin文件夹设置进入环境变量PATH中。 如:


D:LLVMbin


下载安装 Git for Windows


提供Git支持和MINGW64指令终端。


下载 OpenOCD for Windows


下载后的文件不是安装包,把程序文件夹放入自己的软件安装目录下,将软件的bin文件夹路径加入用户环境变量PATH中。 如:


D:OpenOCD0.10.0bin


下载安装 arm-none-eabi-gcc


正常安装,安装后需要将软件的安装目录下的bin文件夹设置进入环境变量PATH中。 如:


D:GNU Tools ARM Embedded7 2017-q4-majorbin


配置 VS Code

安装插件


在软件左侧选项中选择扩展选项,在插件市场中搜索安装 VS Code 插件如下:


ARM


提供 ARM 汇编代码的语法识别加亮


C/C++


提供 C/C++ 的语法智能感知、加亮及调试功能


C/C++ Clang Command Adapter


提供 Clang 功能的调用


Code Outline


提供类似 eclipse 文件函数列表的功能


GBKtoUTF8


用来识别调整文件的编码格式


Makefiles support for VSCode


提供对 Makefile 的语法识别等功能


设置 VS Code 功能


点击 文件 -> 首选项 -> 设置,来打开 VS Code 的配置文件( VS Code 采用 json 格式的文件进行配置,没有图形界面),在文件中加入如下配置(窗口左侧为系统壳配置选项及默认参数是只读的,右侧窗口为配置设置界面,可写),尤其注意最后两项执行程序的路径要设到自己的路径下:


{

    "editor.detectIndentation": false,

    "git.ignoreMissingGitWarning": true,

    "files.autoGuessEncoding": true,

    "editor.formatOnSave": true,

    "editor.formatOnPaste": true,

    "editor.formatOnType": true,

    "terminal.integrated.shell.windows": "D:\Git\bin\bash.exe",

    "terminal.external.windowsExec": "D:\Git\bin\bash.exe",

}


然后我们我们重启程序加载配置,而后点击 查看 -> 集成终端 可以看到 VS Code 的内部终端已经改变为 MINGW64 的终端。


这里写图片描述


开发工程

首先选择一个用 CubeMX 生成的带 Makefile 的工程目录,右键点击空白处,选择以 Open With Code ,首先我们打开 Makefile 文件,修改求其中的 arm-none-gcc-eabi 的路径设置,由于我们已经将工具链的路径设置进入环境变量中,这里只需要将执行指令前的路径变量全部删除即可,如下:


#######################################

# binaries

#######################################

BINPATH = 

PREFIX = arm-none-eabi-

CC = $(PREFIX)gcc

AS = $(PREFIX)gcc -x assembler-with-cpp

CP = $(PREFIX)objcopy

AR = $(PREFIX)ar

SZ = $(PREFIX)size

HEX = $(CP) -O ihex

BIN = $(CP) -O binary -S


修改样本工程下的配置文件到自己的工程中


.vscode 目录下文件共有3个配置文件,实际上我们只需要配置launch.json文件就可以实现全部的调试功能,但是由于vscode不会自动识别makefile中的配置参数,所以如果想要使其代码索引,智能感知运行正确的话,就需要我们单独设置其中的c_cpp_properties.json文件。


c_cpp_properties.json 用于设定工程的 Include 路径,宏定义及搜索浏览路径,其中需要设定三个参数:


includePath 提供.h的搜索目录

defines 编译时在指令中加入的宏定义

path 使用右键或ctrl追踪函数实现时搜索的目录

launch.json 用于设定调试功能 

这个文件的参数很多,我们对于简单的使用,只需要将其中的路径改为自己的工程路径和名称即可,有关于其具体意义和使用方式的说明可以查看c/c++插件的官方github userguid来学习使用。其中需要注意的是,由于我们的调试是在windows环境下使用mingw64来实现的,所以在调试的启动过程中指令会在windows cmd和mingw64跳转几次,具体指令是在哪个终端内调用的要根据指令的类型来决定,所以我们必须很小心的来设置路径参数,分清“ / ” 和 “ ”路径的表示方法,如果执行起来有错误,就多看看启动时,在调试窗口打印的记录来调整修改正确。


settings.json 用于设定工程中 VS Code 的特殊设置 

可以设置特定的如代码格式化样式等。


启动调试


如果我们之前 c_cpp_properties.json 设置正确的话,这时在左侧调试界面中,我们应该就可以看到,launch中有一个调试启动选项了,在下方终端中使用make编译生成elf文件,点击启动调试,即可开始调试了。启动后与大多数编译器操作是相同的,单步运行,右键运行到该行,鼠标悬停显示数据等。(唯一注意的是由于插件本身的bug,调试启动后不会自动停在代码起始位置或main函数入口位置,对此我们只需要在调试前在代码运行的第二行或者main函数入口手动加个断点即可)

这里写图片描述

这里写图片描述

参考资料

样板工程Github:https://github.com/zhengyangliu/VSCode_STM32_Templet


VS Code 扩展C/C++插件使用说明:https://github.com/Microsoft/vscode-cpptools

关键字:STM32  Code  开发环境 引用地址:STM32高级开发(18)-使用VS Code搭建STM32开发环境

上一篇:如何在linux环境下使用gcc进行stm32项目开发
下一篇:关于一个STM32编译报错问题,变量声明不能在语句后面

推荐阅读最新更新时间:2024-10-31 14:06

STM32 中JTAG 引脚作为普通IO口设置方法
第一次画STM32 的PCB ,因为采用了SWD 调试,认为JTAG的引脚PB3,PB4,没有用到就做了普通IO口,麻烦从此引起了。 设置PB3,PB4均为输出口,且输出高电平,用万用表测量,PB4为高,PB3不是高电平,在看MDK 中的寄存器值,PB3,PB4都是高啊?寄存器的值怎么和实际的值不一样了? 唉,都让我怀疑是不是引脚接错了,反复测量后发现引脚确实是对的,但为什么PB3能输出高,而PB4不可呢? 不知道,问度娘,后来在一个帖子上发现了相关回复: 首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些 端口设置为
[单片机]
VSLAM技术框架详述(1)
      最早的SLAM雏形是在军事(核潜艇的海底定位)上的应用,主要传感器是军用雷达。SLAM技术发展到如今已经几十年,目前以激光雷达作为主传感器的SLAM技术比较稳定、可靠,仍然是主流的技术方案。但随着最近几年计算机视觉技术的快速发展,SLAM技术越来越多的应用于家用机器人、无人机、AR设备,基于视觉的Visual SLAM(简称VSLAM)逐渐开始崭露头角。今天就来帮大家普及下VSLAM的技术框架。      深圳市不止技术有限公司DTOF激光雷达广泛应用于无人驾驶、商用服务机器人、物流AGV车、大屏互动、安防、测绘、港口、工业自动化等八大产业生态圈。公司聚焦高性能、低成本二维及三维激光雷达技术的研究与开发,旨在为客户提供
[机器人]
STM32的exti中断调试遇到一奇怪问题总结
前两日调试EXTI 中断程序,程序很简单抄了网上的范例,起初调试正常,可以正常运行,但我在程序中加入另外的代码后问题出现,表现为中断莫名其妙的开始响应!检查自己的程序,未发现异常,中断部分的设置也没有为题。逐步屏蔽后加入的代码,依据屏蔽的代码不同,单步运行后从不同的位置跳入中断。怪哉怪哉....反复调试若干遍,花费时间2天有余... 百思不得其解之际,又检查了自己的板子,看到BOOT1悬空,心中一动,当初图省事,空了此脚,难不成问题在此? 找了调帽装上,一切正常,吐血.... .....(心里活动省略200字) 原来 虽然boot0置0了,但是boot1还是不能悬空的呀! ------------------------------
[单片机]
使用DFU方案实现STM32单片机的高级开发
什么是 DFU DFU全称为Device Firmware update,是ST官方推出的一个通过USB接口进行IAP升级的方案,同串口ISP一样,他们都集成在了芯片内部的Bootloader区段,可以通过配置boot引脚来启动。(具体可参照ST文档:AN2606)。不过内置DFU的芯片大部分型号都比较新,如果你用的型号没有内置DFU程序,没关系我们也可以通过CubeMX来快速生成和移植一个DFU功能程序到你的Flash中来使用。 DFU方案完整的组件包括单片机DFU Demo代码、PC端升级程序、PC端Demo代码以及相关资料手册等。通过使用DFU方案,我们可以快速的集成升级功能到开发的产品中,同时还能够快速的开发与之配套的
[单片机]
使用DFU方案实现<font color='red'>STM32</font>单片机的高级开发
STM32之通用定时器计数器模式
#include stm32f10x.h /* RCC时钟配置 */ void RCC_config() { ErrorStatus HSEStartUpStatus; /* RCC寄存器设置为默认配置 */ RCC_DeInit(); /* 打开外部高速时钟 */ RCC_HSEConfig(RCC_HSE_ON); /* 等待外部高速时钟稳定 */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* 设置HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /
[单片机]
STM32控制步进电机实现精确转动
驱动方式为A-AB-B-BC-C-CD-D-DA-A 使用延时函数实现 主函数 #include dj.h #include delay.h #include sys.h #include key_led.h //ALIENTEK miniSTM32¿ª·¢°åʵÑé1 //ÅÜÂíµÆʵÑé //¼¼ÊõÖ§³Ö£ºwww.openedv.com //¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾ int main() { int i=512; //ÕâÀïתһȦÐèÒª4096¸öÂö³åÐźŠתһȦ
[单片机]
STM32 SysTick延时的使用说明
/*初始化时钟*/ void Init_SysTick(void) { if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5库中 SystemFrequency 被 SystemCoreClock 取代。 while(1); } /*延时1ms函数*/ __IO uint32_t TimingDelay; void delay_ms(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } /*stm32f10x_it.c中的void SysTick_Handler(v
[单片机]
STM32固件库SYSTEM 文件夹介绍
SYSTEM 文件夹里面的代码,此文件夹里面的代码由 ALIENTEK 提供,包含了几乎每个实验都可能用到的延时函数,位带操作,串口打印代码等。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、usart.c 及其头文件 delay.h,sys.h,usart.h。 delay 文件夹代码介绍 delay 文件夹内包含了 delay.c 和 delay.h 两个文件,这两个文件用来实现系统的延时功能,其中包含 3 个函数: void delay_init(u8 SYSCLK); //该函数用来初始化 2 个重要参数:fac_us 以及 fac_ms;同时把
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved