在使用 VS Code 和 Keil 协同开发 STM32 程序

在使用 VS CodeKeil 协同开发 STM32 程序时,可以利用 Keil 强大的编译器VS Code 的高效代码编辑功能,结合起来提高开发效率。以下是实现协同开发的详细步骤:

前置准备
安装 Keil
确保已安装 Keil MDK-ARM,并配置好开发环境。
Keil 下载地址:Keil 官方网站
安装 VS Code
下载并安装最新版本的 VS CodeVS Code 官网
安装 ARM Compiler
Keil 自带 ARM Compiler,可以直接使用。如果需要单独安装,确保与 Keil 的版本匹配。

步骤一:配置 Keil 项目
新建或打开 Keil 项目
使用 Keil MDK 创建 STM32 项目,并完成初步配置(包括目标设备、外设库等)。
生成项目工程文件
在 Keil 中保存项目文件(如 *.uvprojx*.uvproj 文件)。
找到编译器路径
确认 Keil 使用的 ARM 编译器路径,通常位于:makefile

C:\Keil_v5\ARM\ARMCC\bin

C:\Keil_v5\ARM\ARMCLANG\bin

步骤二:在 VS Code 中配置项目
安装 VS Code 扩展
打开 VS Code,安装以下扩展:C/C++(Microsoft 提供)
Cortex-Debug
ARM Assembly
打开项目文件夹
使用 VS Code 打开 Keil 项目所在的文件夹。
配置 C/C++ Intellisense
在项目根目录下创建或编辑 c_cpp_properties.json

{
  "configurations": [
    {
      "name": "Keil STM32",
      "includePath": [
        "${workspaceFolder}/**",
        "C:/Keil_v5/ARM/ARMCC/include"
      ],
      "defines": [
        "STM32F103xB", // 根据你的芯片型号修改
        "__MICROLIB"
      ],
      "compilerPath": "C:/Keil_v5/ARM/ARMCC/bin/armcc.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "gcc-arm"
    }
  ],
  "version": 4
}

添加调试配置

  • .vscode 文件夹下创建或编辑 launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Cortex Debug",
      "type": "cortex-debug",
      "request": "launch",
      "servertype": "openocd",
      "cwd": "${workspaceFolder}",
      "executable": "${workspaceFolder}/build/your_project.elf", // 替换为你的 ELF 文件路径
      "device": "STM32F103C8", // 替换为你的设备型号
      "configFiles": [
        "interface/stlink.cfg",
        "target/stm32f1x.cfg"
      ]
    }
  ]
}

步骤三:同步编辑和编译
在 VS Code 中编辑代码
使用 VS Code 的语法高亮和 Intellisense 快速编写代码。
注意:代码文件的目录结构需与 Keil 项目保持一致。
在 Keil 中编译
编辑完成后,切换到 Keil,点击 Build 按钮完成代码编译。
设置自动同步
如果频繁切换文件,可借助 VS Code 的终端执行 build.bat,以实现自动调用 Keil 的编译器。
示例 build.bat 文件:

@echo off
set KEIL_PATH=C:\Keil_v5
"%KEIL_PATH%\UV4\UV4.exe" -b your_project.uvprojx -o build.log

步骤四:调试与烧录
在 Keil 中烧录程序
Keil 提供直接烧录支持,连接调试器(如 ST-Link)后,可以直接下载代码到设备。
在 VS Code 中调试
配置 launch.json 后,点击调试按钮,可以使用 Cortex-Debug 扩展进行调试。

步骤五:优化工作流(可选)
结合 CMake
如果希望完全脱离 Keil 的 UI,可以将 Keil 的工程文件转为 CMake 项目,直接在 VS Code 中完成所有构建工作。
Makefile 集成
通过 Makefile 或 Ninja 构建系统调用 Keil 的编译工具链,实现自动化构建。
Git 管理代码
使用 Git 管理项目版本,可以在 VS Code 的 Source Control 面板中方便地提交和管理代码。

通过以上配置,你就可以实现 VS Code 和 Keil 的高效协同开发,既利用了 Keil 强大的编译器和烧录能力,又享受了 VS Code 出色的编辑体验!

发布者:myrgd,转载请注明出处:https://www.object-c.cn/5005

Like (0)
Previous 2024年12月1日 下午1:40
Next 2024年12月2日 上午11:43

相关推荐

  • java中使用 Arrays.asList()新增报错问题解决方法

    Arrays.asList() 返回的是一个固定大小的列表。如果你尝试使用该列表进行添加、删除等修改操作,会抛出 UnsupportedOperationException 异常。这是因为 Arrays.asList() 返回的列表背后是一个数组,它的大小是固定的,不能进行动态修改。解决方法使用 ArrayList 包装 Arrays.asList() 的结…

    2024年12月2日
    00
  • Unity 项目升级URP/HDRP渲染管线时如何解决材质丢失问题

    在 Unity 项目中升级到 URP(通用渲染管线) 或 HDRP(高清渲染管线) 后,材质丢失是一个常见问题。这通常是因为原来的材质或着色器不兼容新渲染管线,需要手动调整或重新配置。以下是详细的解决方法: 1. 理解渲染管线的变化 2. 自动转换材质(官方工具) Unity 提供了从 Built-in 渲染管线迁移到 URP 或 HDRP 的官方工具,可以…

    2024年11月25日
    00
  • 安装 Laravel 11 + Filament 详细教程

    安装Laravel 11之前选确保安装了Composer 管理器,接下来的步骤是通过Composer 包管理器安装完成的。 一、前提条件 二、使用 Composer 创建新的 Laravel 11 项目 三、在现有项目中添加 Laravel 11(如果是集成到现有项目) 请注意,在实际安装过程中,可能会遇到各种问题,如权限问题(在 Linux 下,如果没有足…

    11小时前
    00
  • Spring Boot 项目中对接海康摄像头的视频流播放

    在 Spring Boot 项目中对接海康摄像头的视频流播放,通常需要利用摄像头的 RTSP 协议,将实时视频流解码并转发到前端以实现播放功能。以下是具体实现步骤: 1. 项目准备 前置条件 RTSP 流地址格式 海康摄像头的 RTSP 流地址格式通常为: 例如: 2. 后端实现视频流转发 为了在后端转发视频流到前端,我们需要解码 RTSP 流并将其转为适配…

    2024年11月24日
    00
  • 在github上提交PR(Pull Request) + 多个pr同时提交、互不干扰的方法

    在 GitHub 上提交 PR(Pull Request)是一种将代码变更合并到主分支或其他目标分支的常见方式。在同时处理多个 PR 时,需要使用独立的分支来避免相互干扰。以下是详细教程: 步骤一:单个 PR 的提交流程Fork 仓库如果没有直接访问权限,先 fork 原仓库到自己的 GitHub 帐号。在 fork 的仓库上操作自己的代码。克隆仓库到本地 …

    2024年11月26日
    00
  • Java Spring MVC 超详解介绍

    Spring MVC 是 Spring 框架中用于构建 Web 应用程序的模块,它采用了 MVC 模式(Model-View-Controller)。Spring MVC 的核心目标是将业务逻辑、数据层、以及展示层分离,使得代码清晰易维护。 Spring MVC 的架构 1. 核心组件 Spring MVC 工作流程 Spring MVC 核心注解 1. @…

    2024年11月21日
    00
  • 在 Apache Spark 中,任务的切分(Task Division)机制

    在 Apache Spark 中,任务的切分(Task Division)是 Spark 将应用程序逻辑划分为多个并行任务的核心机制。任务切分的主要原则是基于数据分区和操作算子。以下是任务切分的核心原则和关键影响因素: 1. Spark 任务切分的基本概念 2. 任务切分的原则 2.1 基于分区(Partition)的切分 2.2 基于依赖关系(Depend…

    2024年11月25日
    00
  • Windows 系统中使用 VSCode 配置 C/C++ 开发环境教程

    在 Windows 系统中使用 VSCode 配置 C/C++ 开发环境,可以高效编写和调试代码。以下是详细步骤: 1. 安装必要工具 1.1 安装 VSCode 1.2 安装 C/C++ 编译器 推荐使用 MinGW-w64: 验证是否安装成功: 2. 安装 VSCode 插件 打开 VSCode 的扩展市场(Ctrl+Shift+X),搜索并安装以下插件…

    2024年11月26日
    00
  • 搭建一个基于 Node.js 和 MySQL 的微信小程序

    搭建一个基于 Node.js 和 MySQL 的微信小程序后台可以帮助你管理数据、处理请求、存储用户信息等。下面是如何从头开始搭建一个基本的微信小程序后台系统的详细步骤。 1. 环境准备 确保你已经安装以下开发工具: 2. 创建 Node.js 项目 首先,创建一个新的 Node.js 项目: 2. 安装必要的依赖包: 使用以下命令安装这些依赖: 配置 My…

    2024年11月24日
    00
  • 微信小程序的 RequestTask.onChunkReceived 接口接收二进制数据流

    微信小程序的 RequestTask.onChunkReceived 接口允许接收分块的二进制数据流(如视频或音频流),但在小程序环境中,由于不支持 TextDecoder,处理这些数据时需要采用其他方法。 解析数据流的方案 模拟 TextDecoder 功能 如果需要将 ArrayBuffer 转换为字符串(如 UTF-8 编码),可以通过自定义方法模拟 …

    2024年11月26日
    00
  • 在 Spring Boot 中实现定时任务,可以使用以下三种方式

    1. 使用 @Scheduled 注解 这是 Spring 提供的简单方式,基于注解实现定时任务。 步骤: 3. 创建任务类使用 @Scheduled 注解定义定时任务: 4. @Scheduled 参数详解 2. 使用 ScheduledExecutorService 如果任务管理需要更灵活,可以使用 Java 自带的线程池。 示例: 3. 使用 Quar…

    2024年11月26日
    00
  • Python与Jupyter Notebook中的数据可视化实现

    数据可视化是分析和展示数据的重要手段,而 Python 与 Jupyter Notebook 是构建交互式数据可视化的重要工具组合。以下是如何在 Python 和 Jupyter Notebook 中实现数据可视化的详细介绍。 1. 常用数据可视化库Python 中有多个强大的可视化库,以下是几个常用的:1.1 Matplotlib特点:功能强大、灵活,但语…

    2024年11月26日
    00
  • 在进行 Java 单元测试时,遇到找不到类名的错误

    在进行 Java 单元测试时,遇到找不到类名的错误,通常是由于以下几个原因引起的。下面是一些常见问题及其解决方法:1. 类路径(Classpath)问题最常见的原因是编译后的类文件没有正确地包含在类路径中,或者类文件没有被正确加载到测试框架中。要解决这个问题,确保以下几点:解决方法:确认类是否存在:首先确保测试类和目标类都已经编译,并且在正确的目录中。检查 …

    2024年11月28日
    00
  • 在 Ubuntu 20.04 上安装 CUDA (Compute Unified Device Architecture) 支持 NVIDIA GPU 的加速计算

    在 Ubuntu 20.04 上安装 CUDA (Compute Unified Device Architecture) 是为了支持 NVIDIA GPU 的加速计算。下面是详细的步骤,包括安装 CUDA、相关驱动以及 cuDNN(用于深度学习的库)。 步骤 1:检查系统要求 步骤 2:安装 NVIDIA 驱动 2. 添加 NVIDIA PPA: 你可以使…

    2024年11月24日
    00
  • Java 8 到 Java 17 的升级涉及一些关键变化

    JDK 8 升级到 JDK 17 指南Java 8 到 Java 17 的升级涉及一些关键变化,包括语言特性、API 更新和性能改进。以下是一些升级要点:语法和语言特性:记录类(Record Class):Java 14 引入了记录类,提供了一种简化创建不可变数据对象的方式。密封类(Sealed Classes):Java 15 引入了密封类,允许开发者限制…

    2024年11月27日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信