在使用 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

相关推荐

  • Unity 项目升级URP/HDRP渲染管线时如何解决材质丢失问题

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

    2024年11月25日
    00
  • Apache Flink 分布式流处理框架中API的使用部分

    Apache Flink 是一个分布式流处理框架,支持批处理和流处理。在 Flink 中,API 是核心部分,允许用户定义数据流处理逻辑、配置作业并执行操作。Flink 提供了多种 API 来满足不同的需求,包括 DataStream API、DataSet API(批处理 API)、Table API 和 SQL API。1. Flink DataStre…

    2024年11月29日
    00
  • synchronized 和自适应锁

    Java 中的 synchronized 是一种常用的线程同步机制,它通过内置的锁(监视器锁,Monitor Lock)来保护代码块或方法的并发安全。从 JDK 1.6 开始,synchronized 进行了许多优化,其中一个重要的机制是自适应锁(Adaptive Spinning)。 1. 什么是自适应锁? 自适应锁是一种优化锁竞争和线程上下文切换性能的技…

    2024年11月21日
    00
  • 使用 OpenVPN 将多个局域网互联的一种配置方案

    使用 OpenVPN 将多个局域网互联是一个常见需求,尤其是在远程办公或多地分支机构互联场景下。以下是一种基于 OpenVPN 的配置方案,旨在实现多个局域网的互联。 场景说明 网络拓扑图 配置步骤 1. 安装 OpenVPN 在所有相关设备上安装 OpenVPN。以下以 Linux 为例: 2. 配置 OpenVPN 服务器 创建服务器配置文件 编辑 /e…

    2024年12月7日
    00
  • 在 Spring Boot 中实现定时任务,通过 Spring Task Scheduling 来完成

    在 Spring Boot 中实现定时任务,可以通过 Spring Task Scheduling 来轻松完成。Spring 提供了多种方法来调度任务,其中使用 @Scheduled 注解是最常见且简单的方式。 步骤:在 Spring Boot 中实现定时任务 1. 启用定时任务 首先,确保在 Spring Boot 应用的主类或配置类中启用定时任务功能: …

    2024年11月26日
    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
  • 微信小程序的 RequestTask.onChunkReceived 接口接收二进制数据流

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

    2024年11月26日
    00
  • 通过 PHP 读取微软邮箱(Outlook/Office 365 邮箱)

    通过 PHP 读取微软邮箱(Outlook/Office 365 邮箱)邮件,通常需要使用 Microsoft Graph API,因为微软逐步淘汰了基于用户名和密码的 IMAP/SMTP 方式。Microsoft Graph API 支持 OAuth2.0 认证,可以安全地访问和管理用户邮件。 以下是实现读取微软邮箱邮件的完整示例。 实现步骤 1. 准备工…

    2024年11月25日
    00
  • 在 MacOS 上开启 HIDPI 模式的多种方案

    在 MacOS 上开启 HIDPI 模式可以帮助提升显示器的清晰度,尤其是在使用 Retina 屏幕时。以下是几种常见的方案:1. 通过终端命令启用 HIDPI 模式打开 终端 (Terminal)。输入以下命令: 然后重启 Mac,或者注销当前用户并重新登录。这将启用隐藏的高分辨率模式。2. 通过 SwitchResX 工具SwitchResX 是一个强大…

    2024年11月27日
    00
  • 云服务器安装宝塔强制重启导致MySQL无法启动

    在云服务器上进行 强制重启 后,MySQL 无法启动的情况,通常是由于以下几种原因引起的。强制重启可能会导致 MySQL 数据库的文件系统损坏、配置文件丢失、锁定文件问题等,下面是一些排查和解决方法。1. 检查 MySQL 错误日志MySQL 无法启动时,首先需要查看 MySQL 的错误日志,以获取更多的错误信息。错误日志通常位于 /var/log/mysq…

    2024年11月29日
    00
  • 解决 WordPress 后台无法登录的常见问题

    WordPress 后台无法登录是一个常见问题,可能由多种原因引起,包括插件冲突、主题问题、数据库错误或用户账户问题。以下是详细的排查和解决步骤: 1. 检查登录页面 URL 确保您访问的是正确的 WordPress 登录页面: 2. 清除浏览器缓存和Cookie 3. 重置密码 用新密码尝试登录。 4. 禁用插件 某些插件可能会导致登录问题。尝试通过以下方…

    2024年12月9日
    00
  • 在 VSCode 中安装和配置 C/C++ 开发环境及调试功能

    在 VSCode 中安装和配置 C/C++ 开发环境及调试功能,涉及几个关键步骤:安装 VSCode、安装 C/C++ 编译器、安装 C/C++ 扩展、配置调试环境等。下面是一个详细的保姆级教程,带你一步步完成配置。1. 安装 VSCode首先,你需要安装 Visual Studio Code(简称 VSCode)。可以通过以下步骤完成安装:访问 Visua…

    2024年11月29日
    00
  • Solving the Makefile Missing Separator Stop Error in VSCode ……

    在 VSCode 中处理 Makefile 的 missing separator. Stop 错误,通常是因为 Makefile 中的命令行前没有用Tab 键缩进,而使用了空格。Makefile 规定,配方(recipe)中的每个命令行必须以Tab 键开头,而不是空格。 解决方法1. 检查 Makefile 的缩进打开报错的 Makefile 文件。找到出…

    2024年12月2日
    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
  • 在Java中 ArrayList 和 LinkedList 实现 List 接口类

    在Java中,ArrayList 和 LinkedList 都是实现了 List 接口的类,但它们在底层实现和使用场景上有显著的区别。以下是它们的主要区别: 1. 底层实现ArrayList基于动态数组实现。元素是连续存储的,每个元素都可以通过索引直接访问。LinkedList基于双向链表实现。每个元素由节点(Node)存储,节点包含数据和前后节点的引用。 …

    2024年12月2日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信