VSCode嵌入式开发环境搭建
Vscode开发环境搭建
看这个链接就可以了,后面下载调试有点问题看下3.3。
在VSCode上部署STM32F1的开发环境
1. MXCube配置工程生成Makefile文件
借助正确的编译工具链进行编译,
2. 编译工具链搭建
-
编译工具链使用GCC的ARM版本 arm-none-eabi-gcc ,
安装后cmd输入arm-none-eabi-gcc -v查看是否安装成功
各版本arm-gcc区别与安装


-
make,安装MinGW64附带make,
安装后cmd输入mingw32-make -v或make -v查看是否安装成功

-
cmd切换到工程根目录下,输入
make或mingw32-make,make指令可以自己找到Makefile文件进行编译(编译的时候记得确认下Makefile里配置的.c文件和头文件路径是否全了),编译成功标志在build文件加下产生了.elf/.bin/.hex文件。 -
可以把编译生成的文件通过STLink Utility或者串口编程下载到单片机上运行。
STM32 ST-LINK Utility使用说明
3. VSCode开发环境部署
3.1 VSCode上下载插件
- C/C++ , 使用代码提示功能
- Cortex-Debug,它能够构建针对Cortex内核的微处理器的调试器;
- Cortex-Debug: Device Support Pack - STM32xx,前者的一个辅助插件,它能够让前者运行时显示STM32xx系列的外设寄存器状态;
- VSCode打开工程,
终端 -> 配置任务 -> 使用模板创建task.json -> Other,生成.vscode文件夹,里面tasks.json文件,文件下tasks数组里每个对象都代表一个任务。
终端 -> 运行生成任务 ->选择自己task.json里配置的任务名,可以通过这样的方式自动生成工程。 - .vscode文件夹下创建c_cpp_properties.json文件,主要是配置工程头文件路径,工程宏,编译器(做代码检查的编译器)路径等等。
- VSCode里运行任务,生成==.elf/.bin/.hex==文件。终端->运行任务(tasks.json里配置的任务名)。注,除了MXCube生成的,自己的代码文件记得在Makefile文件里手动添加。

3.2 下载和调试
(注:下载的话也可直接用STLink Utility下载上面文件)
OpenOCD
调试使用 GDB:调试器,使用OpenOCD将GDB和在线调试器连接。
OpenOCD:搭建了一个GDB Server,联通了硬件调试器和GDB,通过USB和硬件调试器连接,并通过TCP和GDB连接。
win下OpenOCD已经编译好的二进制文件,下载并把OpenOCDd bin文件夹加到系统环境变量里。
OpenOCD下载
用到的
share/openocd/scripts/target:目标平台配置文件
share/openocd/scripts/interface:使用的调试器接口配置文件
3.3 使用VSCode做gdb的前端编译下载和调试
1. 在vscode中通过设置配置文件build工程并烧录。
task.json内容: 前两个任务分别是build项目,生成二进制文件,通过openocd烧录到开发板中。第三任务是打开openocd,应该用不到的,后面会使用Cortex-Debug插件加调试的launch.json文件
{// See https://go.microsoft.com/fwlink/?LinkId=733558// for the documentation about the tasks.json format"version": "2.0.0","tasks": [{"label": "Build","type": "shell","command": "mingw32-make","args": ["-j4"],"problemMatcher":["$gcc"],"group": {"kind": "build","isDefault": true}},{"dependsOn":"Build","type": "shell","label": "Burn","command": "openocd","args": ["-f","interface/stlink.cfg","-f","target/stm32l4x.cfg","-c","program build/${workspaceFolderBasename}.elf verify reset exit"//"program build/Template_l412.hex reset exit 0x08000000"],"detail": "Burn with OpenOCD" },{"type": "shell","label": "OpenOCD","command": "openocd","args": ["-f","interface/stlink.cfg","-f","target/stm32l4x.cfg"],"detail": "start OpenOCD and wait for gdb" }]
}
然后 F1 (终端)-> 任务 ->运行任务 选择task.json里配置的几个任务执行
2. 在vscode中使用Cortex-Debug插件与launch.json文件调试
运行 -> 添加配置 ->Cortex Debug 产生launch.json文件

launch.json文件修改一下内容:
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Cortex Debug","cwd": "${workspaceRoot}", //输出路径"executable": "./build/${workspaceFolderBasename}.elf","request": "launch","type": "cortex-debug","servertype": "openocd", //调试器选择"device": "STM32L412KB","interface": "swd","configFiles": ["C:/Program Files/OpenOCD-20210729-0.11.0/share/openocd/scripts/interface/stlink.cfg","C:/Program Files/OpenOCD-20210729-0.11.0/share/openocd/scripts/target/stm32l4x.cfg"],"runToMain": false,"preLaunchTask": "Build", //在调试前预先执行的任务,此处是task.json中的//"armToolchainPath":"C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.07\bin" //如果ARM的工具链路没有添加到系统环境变量的话,则需要}]
}
然后 F5或者点,进行调试。

坑:两个json文件中烧录的文件和调试的文件一定选择.elf的,用hex或者bin都会出现各种恶心的错误,用elf的就可以烧录调试了。



@.@:

4. 串口输出重定向
之前usart.c里的不用变

把syscalls.c文件加到工程里就可以了,这个文件在STM32的example串口项目里。然后在Makefile文件里添加下.c。添加这个文件如果有头文件找不到报错,就在c_cpp_properties.json里添加下包含路径。

5. 硬件与接线
5.1 下载调试
硬件:STLlink / JLink / eLink(含串口)
注:根据这个不同OpenOCD选择对应的目录下的 *.cfg 文件
…\OpenOCD-20210729-0.11.0\share\openocd\scripts\interface
eLink没有自己创建个 elink_dap.cfg 文件
adapter driver cmsis-dap
transport select swd
接线:SWDIO SWCLK VCC GND

5.2 log
硬件:CH340
接线:TX RX GND
6. 其他问题及解决方法补充
- 使用STLink下载报错:Error: expected 1 of 1: 0x1ba01477
解决:https://blog.csdn.net/nick_young_qu/article/details/108217987
修改cfg文件
编辑~/.platformio/packages/tool-openocd/scripts/target/stm32f1x.cfg
把set _CPUTAPID 0x1ba01477改为set _CPUTAPID 0x2ba01477 - 使用STLink要用工具UsbDriverTool.exe转驱动

6. 链接:
STM32开发之 VS Code + GDB下载调试
此外可以通过IOT Link插件来更加简单:这个插件安装在最近的VSCode1.60.x不能用,使用VSCode1.52.1可以,要关闭VSCode的更新,编译可以,我调试好像没弄好。大体跟前面的一样执行那些命令。
史上最简单的VSCODE+STM32开发环境搭建方式——基于IoT Link
[交流吐槽] 关于VS Code自动更新后导致IoT Link扩展插件不可用的问题
相关文章:
VSCode嵌入式开发环境搭建
Vscode开发环境搭建 看这个链接就可以了,后面下载调试有点问题看下3.3。 在VSCode上部署STM32F1的开发环境 1. MXCube配置工程生成Makefile文件 借助正确的编译工具链进行编译, 2. 编译工具链搭建 编译工具链使用GCC的ARM版本 arm-none-eabi-gcc &am…...
数据结构之栈的使用
栈是计算机科学中一个重要的数据结构。它是一种特殊的线性表,只允许在一端进行进出操作。这一端被称为栈顶,另外一端被称为栈底。栈的特点是后进先出,即最后进入栈的元素会先被弹出栈。栈的应用广泛,例如在编译器中,栈…...
QMessageBox手动添加按钮并绑定按钮的信号
视频展示效果(结合代码看效果更佳哦,代码在最下面): QMessageBox手动添加有重试效果的按钮效果图: 点击详细文本之后展开如下图: 图标可选: QMessageBox::Critical错误图标QMessageBox::NoIco…...
【C++进阶】位图和布隆过滤器
文章目录位图位图概念位图使用场景位图的结构构造setresettest完整代码布隆过滤器布隆过滤器概念布隆过滤器结构构造setresettest完整版代码位图 位图概念 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用…...
Android开发-Android UI与布局
01 Android UI 1.1 UI 用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。软件设计可分为两个部分:编码设计与UI设计。 1.2 Andr…...
在不丢失数据的情况下解锁锁定的 Android 手机的 4 种方法
尽管您可以使用指纹解锁手机,但大多数智能手机都需要 PIN 码、图案或字母数字代码作为主密码。如果您有一段时间没有输入手机密码,很容易忘记。正是由于这个原因,即使您打开了指纹解锁,大多数智能手机也会让您每天至少输入一次 PI…...
【11】核心易中期刊推荐——人工智能 | 图形图像处理
🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…...
Spring 中的事件发布与监听
主要代码在org.springframework.context,org.springframework.context.event包中 事件发布与监听主要包含以下角色: 事件:ApplicationEvent事件监听器:ApplicationListener SmartApplicationListener GenericApplicationListene…...
c++ 一些常识 2
前言 今天主要讲类相关概念。 构造和析构函数是否可以抛出异常 在构造函数中抛出异常,控制权会转出构造函数之外,对象的析构函数不会被调用,造成内存泄漏。 如果析构函数中抛出异常,而且没有在当地捕捉,析构函数便执…...
用嘴写代码?继ChatGPT和NewBing之后,微软又开始整活了,Github Copilot X!
用嘴写代码?继ChatGPT和NewBing之后,微软又开始整活了,Github Copilot X! AI盛行的时代来临了,在这段时间,除了爆火的GPT3.5后,OpenAI发布了GPT4版本,同时微软也在Bing上开始加入了A…...
3分钟阐述这些年我的 接口自动化测试 职业生涯经验分享
接口自动化测试学习教程地址:https://www.bilibili.com/video/BV1914y1F7Bv/ 你好,我是凡哥。 很高兴能够分享我的接口自动化测试经验和心得体会。在我目前的职业生涯中,接口自动化测试是我经常进行的一项任务。通过不断地学习和实践…...
十大Python可视化工具,太强了
今天介绍Python当中十大可视化工具,每一个都独具特色,惊艳一方。 Matplotlib Matplotlib 是 Python 的一个绘图库,可以绘制出高质量的折线图、散点图、柱状图、条形图等等。它也是许多其他可视化库的基础。 import matplotlib.pyplot as p…...
五.ElasticSearch的基础+实战
五.ElasticSearch的基础+实战 1.Elasticsearch的是什么? 2.Elasticsearch的作用是什么? 3.Elasticsearch的核心思想? 4.Elasticsearch启动与简单使用 5.kibana结合elasticsearch实现简单的增删改查 6.elasticsearch安装中文分词器 7.elasticsearch结合springboot开发…...
Oracle的学习心得和知识总结(十三)|Oracle数据库Real Application Testing之Database Reply实操(一)
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Guid…...
CAD外部参照如何重新定位?CAD外部参照重定位步骤
CAD外部参照如何重新定位?这个问题并不算是一个常见的问题,但偶尔也会遇到,今天小编就来给大家简单介绍一下浩辰CAD软件中CAD外部参照重定位的操作步骤,一起来看看吧! CAD外部参照重定位步骤: 浩辰CAD软件…...
11. C#高级进阶
一、C# 异常处理 在 C# 中,异常是在程序运行出错时引发的,所有异常都派生自 System.Exception 类。异常处理就是处理运行时错误的过程,通过异常处理可以使程序在发生错误时保持正常运行。 C# 中的异常处理基于四个关键字构建,分别…...
网络编程套接字( TCP协议通讯流程)
目录 1、绑定失败问题 2、TCP协议通讯流程 三次握手的过程 数据传输的过程 四次挥手的过程 TCP和UDP对比 1、绑定失败问题 当我们测试网络代码时,先将服务端绑定8080端口运行,然后运行客户端,并让客户端连接当前服务器: 当有客户…...
WPF毛笔字实现过程
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
MHA实现mysql数据库高可用
目录 MHA原理 MHA工具包 MHA实现mysql高可用实战 MHA原理 ①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events) ②识别含有最新更新的slave ③应用差异的中继日志&…...
leetcode每日一题:55. 跳跃游戏
系列:贪心算法 语言:java 题目来源:Leetcode55. 跳跃游戏 题目 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
