使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

工具

  1. make:Windows中没有make,但是可以通过安装MinGW或者MinGW-w64,得到make。
  2. gcc-arm-none-eabi:建议最新版,防止调试报错
  3. OpenOCD
  4. vscode
  5. cubeMX

VSCODE 插件

  1. Arm Assembly:汇编文件解析
  2. C/C++:c语言插件
  3. Cortex-Debug:调试插件

添加环境变量路径

  1. gcc-arm-none-eabi\bin

  2. OpenOCD\bin

  3. 建议MinGW-make工具重命名为make.exe并添加到gcc-arm-none-eabi\bin路径

    测试工具环境变量是否生效

     arm-none-eabi-gcc -vOpenOCD -vmake -v
    

创建工程

使用cubeMX创建Makefile工程

Makefile:由于window没有rm指令,所以这里修改为 del,并添加了系统判断

将makefile一下
-------------------------------
clean:-rm -fR $(BUILD_DIR)
-------------------------------
修改
-------------------------------
ifeq ($(OS),Windows_NT)
clean:del $(BUILD_DIR)
else
clean:-rm -fR $(BUILD_DIR)
endif
-------------------------------

工程添加文件

调试器配置
OpenOCD\share\openocd\scripts\interfacestlink-v2.cfg
芯片配置
OpenOCD\share\openocd\scripts\targetstm32f7x.cfg

vscode 配置任务脚本

  1. 创建任务脚本
    F1
    输入 tasks
    选择 运行任务
    选择 配置任务
    选择 使用模板创建task.json
    选择 other
    选择创建 tasks

  2. 使用任务脚本

    CTRL + SHIFT + B 选择对应的任务
    tasks.json

    {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    “version”: “2.0.0”,
    “tasks”: [
    //make 任务
    {
    “label”: “build”,
    “type”: “shell”,
    “command”: “make”,
    “problemMatcher”: [],
    “group”: {
    “kind”: “build”,
    “isDefault”: true
    }
    },
    // clean 任务
    {
    “label”: “clean”,
    “type”: “shell”,
    “command”: “make clean”,
    “problemMatcher”: [],
    “group”: {
    “kind”: “build”,
    “isDefault”: true
    }
    },
    //下载任物
    {
    “label”: “download”,
    “type”: “shell”,
    “command”: “openocd”,
    // openocd 传递的参数
    “args”: [
    “-f”,
    “stlink-v2.cfg”,
    “-f”,
    “stm32f7x.cfg”,
    “-c”,
    “program build/stm32f767_project.elf verify reset exit”,
    ],
    “group”: {
    “kind”: “build”,
    “isDefault”: true
    },
    },
    ]
    }

vscode 配置调试脚本

1.创建调试脚本
选择调试窗口
选择 创建 launch.json 文件
2. 启用调试
快捷键 F5

launch.json

{"version": "0.2.0","configurations": [{"name": "Cortex Debug","cwd": "${workspaceFolder}","executable": "${workspaceFolder}/build/stm32f767_project.elf",             // 编译文件"request": "launch","type": "cortex-debug","servertype": "openocd","interface":"swd","device": "STM32F7IGT6",                "configFiles": ["stlink-v2.cfg",              "stm32f7x.cfg",]}]
}

调试过程中报错:仔细查看报错信息,gcc版本过低也会造成调试报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP 请求走私漏洞(HTTP Request Smuggling)

一、什么是Http 请求走私漏洞? HTTP请求走私漏洞(HTTP Request Smuggling)是一种安全漏洞,利用了HTTP协议中请求和响应的解析和处理方式的不一致性。攻击者通过构造特定的恶意请求,以欺骗服务器和代理服务器&#xff0…

Godot 4 源码分析 - 增加管道通信

学习研究Godot 4,很爽,虽然很庞杂,但相对于自己的水平来说,很强大,尤其是vulkan这块直接打包可用,省得自己从头琢磨。 一点一点地消化、优化与完善,最终才能成为自己的。 这段时间就在Godot的…

【Matlab】基于随机森林算法的数据分类预测(Excel可直接替换数据)

【Matlab】基于随机森林算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码6.完整代码7.运行结果1.模型原理 基于随机森林算法的数据分类预测是一种集成学习方法,用于解决分类问题。它由多个决策树组成,通过对这些决策树的预测…

Spring期刊模板中,引用Appendix中的表格时,页面显示正确但链接跳转错误

错误描述: 正文中有Table1,Table2, Table3. Appendix中有Table A1, Table A2, Table A3 appendix中引用 Table A1,生成pdf后。appendix中显示Table A1,正确,但是点击Table A1以后&…

Pytorch迁移学习使用Resnet50进行模型训练预测猫狗二分类

目录 1.ResNet残差网络 1.1 ResNet定义 1.2 ResNet 几种网络配置 1.3 ResNet50网络结构 1.3.1 前几层卷积和池化 1.3.2 残差块:构建深度残差网络 1.3.3 ResNet主体:堆叠多个残差块 1.4 迁移学习猫狗二分类实战 1.4.1 迁移学习 1.4.2 模型训练 1.…

华为数通HCIP-ISIS基础

IS-IS的基本概念 isis(中间系统到中间路由协议) 链路状态路由协议、IGP、无类路由协议; IS-IS是一种链路状态路由协议,IS-IS与OSPF在许多方面非常相似:运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此,然后建…

从零开始搭建vue3 + ts + pinia + vite +element-plus项目

前言:据说vue2将于 2023 年 12 月 31 日停止维护,最近打算搭建一个vue3项目来学习一下,以防忘记,记录一下搭建过程。 一、使用npm创建项目 前提条件:已安装 16.0 或更高版本的 Node.js 执行 “npm init vuelatest”…

【Java基础教程】(四十三)多线程篇 · 下:深入剖析Java多线程编程:同步、死锁及经典案例——生产者与消费者,探究sleep()与wait()的差异

Java基础教程之多线程 下 🔹本节学习目标1️⃣ 线程的同步与死锁1.1 同步问题的引出2.2 synchronized 同步操作2.3 死锁 2️⃣ 多线程经典案例——生产者与消费者🔍分析sleep()和wait()的区别? 🌾 总结 🔹本节学习目标…

谷歌插件(Chrome扩展) “Service Worker (无效)” 解决方法

问题描述: 写 background 文件的时候报错了,说 Service Worker 设置的 background 无效。 解决(检查)方法: 检查配置文件(manifest.json) 中的 manifest_version 是否为 3。 background 中的…

如何动态修改 spring aop 切面信息?让自动日志输出框架更好用

业务背景 很久以前开源了一款 auto-log 自动日志打印框架。 其中对于 spring 项目,默认实现了基于 aop 切面的日志输出。 但是发现一个问题,如果切面定义为全切范围过大,于是 v0.2 版本就是基于注解 AutoLog 实现的。 只有指定注解的类或…

DataWhale AI夏令营——机器学习

DataWhale AI夏令营——机器学习 学习记录一1. 异常值分析2. 单变量箱线图可视化3. 特征重要性分析 学习记录一 锂电池电池生产参数调控及生产温度预测挑战赛 已配置环境,跑通baseline,并在此基础上对数据进行了简单的分析。 1. 异常值分析 对训练集…

Dokuwiki 安装

作者:felix 个人博客 1、拉取镜像 docker pull bitnami/dokuwiki:20200729.0.0-debian-10-r1072、docker-compose部属 docker-compose.yml version: 3 services:dokuwiki:image: docker.io/bitnami/dokuwiki:20200729.0.0-debian-10-r107user: rootports:- 80:80…

K8S初级入门系列之八-网络

一、前言 本章节我们将了解K8S的相关网络概念,包括K8S的网络通讯原理,以及Service以及相关的概念,包括Endpoint,EndpointSlice,Headless service,Ingress等。 二、网络通讯原理和实现 同一K8S集群&…

PMP 数据收集工具与技术

数据收集工具与技术 (9个) 标杆对照 标杆对照是指将实际或计划的产品、流程和实践与其他可比组织的 做法进行比较,以便识别最佳实践、形成改进意见,并为绩效考核 提供依据。 头脑风暴 头脑风暴是一种数据收集和创意技术,主要用于在短时间…

三维点云中的坐标变换(只讲关键部分)

一、坐标旋转 坐标旋转包含绕x、y、z轴旋转,在右手坐标系中,x-翻滚(roll),y-俯仰(pitch),z-航向(yaw)。如果想详细了解,可以网络搜索 在PCL中,从baseLink到map的转换关系为:先绕x轴旋转,在绕y轴旋转,最后绕…

【软件工程中的各种图】

1、用例图(use case diagrams) 【概念】描述用户需求,从用户的角度描述系统的功能 【描述方式】椭圆表示某个用例;人形符号表示角色 【目的】帮组开发团队以一种可视化的方式理解系统的功能需求 【用例图】 2、静态图(Static …

【数据结构】C--单链表(小白入门基础知识)

前段时间写了一篇关于顺序表的博客,http://t.csdn.cn/0gCRp 顺序表在某些时候存在着一些不可避免的缺点: 问题: 1. 中间 / 头部的插入删除,时间复杂度为 O(N) 2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不…

前端 | ( 十一)CSS3简介及基本语法(上) | 尚硅谷前端html+css零基础教程2023最新

学习来源:尚硅谷前端htmlcss零基础教程,2023最新前端开发html5css3视频 系列笔记: 【HTML4】(一)前端简介【HTML4】(二)各种各样的常用标签【HTML4】(三)表单及HTML4收尾…

云原生架构下实践与落地DevOps的方法

云原生架构是一种新兴的软件开发和部署模式,它强调了容器化、微服务和自动化管理等技术。DevOps是一种流程和文化,旨在通过自动化和协作来实现快速交付和高质量的软件。在本文中,我们将探讨云原生架构下实践和落地DevOps的方法。 建立自动化…

2023/07/23

1. 必须等待所有请求结束后才能执行后续操作的处理方式 方式一: async func () {const p1 await api1();const p2 await api2();const p3 await api3();Promise.all([p1, p2, p3]).then(res > {后续操作...}) }方式二:待补充 2. flex 弹性盒子布…