在 vscode + cmake + GNU 工具链的基础上配置 JLINK
安装 JLINK
JLINK 官网链接

下载安装后找到安装路径下的可执行文件

将此路径添加到环境变量的 Path 中。
创建 JFlash 项目
打开 JFlash,选择新建项目

选择单片机型号

在弹出的窗口中搜索单片机

其他参数根据实际情况填写

新建完成:

接下来设置一下项目

把 Start Application 勾上,复位方式选择通过复位引脚复位。如果没有这个硬件条件则使用软件复位。

最后保存工程


编写 powershell 脚本
新建一个脚本叫 jlink-release-download.ps1
# 项目参数
$project_name = "test"
$cmake_config = "gcc-release"
$project_path = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$workspace_path = Split-Path $project_path -Parent
$build_path = "$workspace_path/out/build/$cmake_config"
$install_path = "$workspace_path/out/install/$cmake_config"# 开始操作
New-Item -Path $build_path -ItemType Directory -Force
Push-Location $build_path
try
{cmake -G "Ninja" $workspace_path `--preset "$cmake_config"if ($LASTEXITCODE){throw "配置失败"}ninja -j12if ($LASTEXITCODE){throw "编译失败"}ninja install
}
finally
{Pop-Location
}Push-Location $install_path
try
{arm-none-eabi-objcopy -O binary `"$install_path/bin/${project_name}.elf" `"$install_path/bin/${project_name}.bin"$jflash_arg_array = @("-openprj${workspace_path}/jflash-project.jflash","-open${install_path}/bin/${project_name}.bin,0x8000000","-auto","-startapp","-exit")$jflash_arg = $jflash_arg_array -join " "$jflash_arg = $jflash_arg.Trim()Write-Host $jflash_argStart-Process -FilePath "JFlash.exe" `-ArgumentList $jflash_arg `-WindowStyle Normal `-Waitif ($LASTEXITCODE){throw "将 ${project_name}.bin 下载到单片机失败。"}Write-Host "将 ${project_name}.bin 下载到单片机成功。"
}
finally
{Pop-Location
}
项目参数部分根据实际情况修改。
为 DEBUG 配置也创建一个 powershell 脚本,叫作 jlink-debug-download.ps1
# 项目参数
$project_name = "test"
$cmake_config = "gcc-debug"
$project_path = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$workspace_path = Split-Path $project_path -Parent
$build_path = "$workspace_path/out/build/$cmake_config"
$install_path = "$workspace_path/out/install/$cmake_config"# 开始操作
New-Item -Path $build_path -ItemType Directory -Force
Push-Location $build_path
try
{cmake -G "Ninja" $workspace_path `--preset "$cmake_config"if ($LASTEXITCODE){throw "配置失败"}ninja -j12if ($LASTEXITCODE){throw "编译失败"}ninja install
}
finally
{Pop-Location
}Push-Location $install_path
try
{arm-none-eabi-objcopy -O binary `"$install_path/bin/${project_name}.elf" `"$install_path/bin/${project_name}.bin"$jflash_arg_array = @("-openprj${workspace_path}/jflash-project.jflash","-open${install_path}/bin/${project_name}.bin,0x8000000","-auto","-startapp","-exit")$jflash_arg = $jflash_arg_array -join " "$jflash_arg = $jflash_arg.Trim()Write-Host $jflash_argStart-Process -FilePath "JFlash.exe" `-ArgumentList $jflash_arg `-WindowStyle Normal `-Waitif ($LASTEXITCODE){throw "将 ${project_name}.bin 下载到单片机失败。"}Write-Host "将 ${project_name}.bin 下载到单片机成功。"
}
finally
{Pop-Location
}
创建 task.json
在 vscode 项目根目录下的 .vscode 目录创建 task.json 文件

填入以下内容:
{"version": "2.0.0","tasks": [{"label": "stflash-release-download","type": "shell","command": "pwsh","args": ["./stflash-release-download.ps1"],"options": {"cwd": "${workspaceFolder}/test"},"problemMatcher": []},{"label": "stflash-debug-download","type": "shell","command": "pwsh","args": ["./stflash-debug-download.ps1"],"options": {"cwd": "${workspaceFolder}/test"},"problemMatcher": []},{"label": "jlink-debug-download","type": "shell","command": "pwsh","args": ["./jlink-debug-download.ps1"],"options": {"cwd": "${workspaceFolder}/test"},"problemMatcher": []},{"label": "jlink-release-download","type": "shell","command": "pwsh","args": ["./jlink-release-download.ps1"],"options": {"cwd": "${workspaceFolder}/test"},"problemMatcher": []},],
}
args是传递给 pwsh 进程的参数,向它传递 ps1 文件。cwd是启动 pwsh 进程时赋予它的当前路径,将它改成刚刚创建的 ps1 文件所在的目录。
创建 launch.json
在 vscode 项目根目录的 .vscode 目录创建 launch.json 文件

填入以下内容
{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "ST-Link Debug","preLaunchTask": "stflash-debug-download","cwd": "${workspaceFolder}/out/install/gcc-debug/bin/","executable": "${workspaceFolder}/out/install/gcc-debug/bin/test.elf","request": "launch","type": "cortex-debug","runToEntryPoint": "main","servertype": "stlink","showDevDebugOutput": "raw","liveWatch": {"enabled": true,"samplesPerSecond": 4},},{"name": "JLink Debug","preLaunchTask": "jlink-debug-download","cwd": "${workspaceFolder}/out/install/gcc-debug/bin/","executable": "${workspaceFolder}/out/install/gcc-debug/bin/test.elf","request": "launch","type": "cortex-debug","runToEntryPoint": "main","servertype": "jlink","showDevDebugOutput": "raw","device": "STM32H743II","liveWatch": {"enabled": true,"samplesPerSecond": 4},"serverArgs": ["-if","JTAG"],}]
}
CMakePresets.json
附上我的 CMakePresets.json 文件的内容。这不是本文要讲述的。本文只讲述如何在已经配置好 cmake 和 GNU 工具链的情况下配置 JLINK
{"version": 3,"configurePresets": [{"name": "options","hidden": true,"cacheVariables": {"platform": "arm-none-eabi-cortex-m7","obj_copy": "arm-none-eabi-objcopy","CMAKE_SYSTEM_PROCESSOR": "arm","CMAKE_SYSTEM_ARCH": "armv7-m","CMAKE_SYSTEM_NAME": "Generic","CMAKE_C_COMPILER": "arm-none-eabi-gcc","CMAKE_CXX_COMPILER": "arm-none-eabi-g++","CMAKE_ASM_COMPILER": "arm-none-eabi-gcc","CMAKE_LINKER": "arm-none-eabi-ld","CMAKE_SIZE": "arm-none-eabi-size","CMAKE_STRIP": "arm-none-eabi-ld"},"vendor": {"microsoft.com/VisualStudioSettings/CMake/1.0": {"intelliSenseMode": "linux-gcc-arm","disableExternalAnalysis": true}}},{"name": "gcc-debug","displayName": "gcc-debug","inherits": "options","generator": "Ninja","binaryDir": "${sourceDir}/out/build/${presetName}","installDir": "${sourceDir}/out/install/${presetName}","cacheVariables": {"CMAKE_BUILD_TYPE": "Debug"}},{"name": "gcc-release","displayName": "gcc-release","inherits": "options","generator": "Ninja","binaryDir": "${sourceDir}/out/build/${presetName}","installDir": "${sourceDir}/out/install/${presetName}","cacheVariables": {"CMAKE_BUILD_TYPE": "Release"}}]
}相关文章:
在 vscode + cmake + GNU 工具链的基础上配置 JLINK
安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash,选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成: 接下来设置…...
react antd点击table单元格文字下载指定的excel路径
在使用 Ant Design (antd) 的 Table 组件时,如果想点击表格单元格中的文字来触发下载指定路径的 Excel 文件,可以通过以下步骤实现: 1. 确保有一个可供下载的 Excel 文件:需要有一个服务器端点或者一个可以直接访问的 URL…...
01-AD工具使用
01-AD工具使用 AD工程创建1.创建Project工程2.创建原理图&&PCB文件3.保存活动和整个文档 创建新元件的能力导入已有素材:元件库的能力创建各种类型元器件的方法元器件TYPE-C 3.1 母头 16P插头AMS1117-3.3电源芯片STM32F103的IC芯片C2-104电容R4-1K电阻D1发光二极管 原理…...
centos7 配置国内镜像源安装 docker
使用国内镜像源:由于 Docker 的官方源在国内访问可能不稳定,你可以使用国内的镜像源,如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件,并添加以下内容: [docker-ce-stable] nameDocker CE Stable -…...
Java设计模式 十八 状态模式 (State Pattern)
状态模式 (State Pattern) 状态模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。状态模式让一个对象在其状态改变时,其行为也随之改变,看起来就像是改变了对象的类。通过将状态的变化封装到不同的状态对象中,…...
PyTorch张量操作reshape view permute transpose
1. reshape() 和 view() view和reshape都用于改变张量的shape view是reshape的一个特例,view要求张量在内存中是连续的,否则会抛出错误,view只能用于contiguous的张量 reshape会自动处理contiguous的情况,如果张量是contiguous…...
RabbitMQ5-死信队列
目录 死信的概念 死信的来源 死信实战 死信之TTl 死信之最大长度 死信之消息被拒 死信的概念 死信,顾名思义就是无法被消费的消息,一般来说,producer 将消息投递到 broker 或直接到queue 里了,consumer 从 queue 取出消息进…...
macOS使用LLVM官方发布的tar.xz来安装Clang编译器
之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz,那MacOS应该也是可以安装的。 笔者2015款MBP笔记本,CPU是intel的,出厂…...
【算法学习】归并排序算法思想的应用—求逆序对数量
Hey,大家好!👋 今天我们来聊聊一个有趣的话题——如何在归并排序的基础上,高效解决求逆序对数量的问题。如果你对算法感兴趣,或者正在准备算法面试,这篇文章一定会对你有所帮助!🚀 …...
一组开源、免费、Metro风格的 WPF UI 控件库
前言 今天大姚给大家分享一个开源、免费、Metro风格的 WPF UI 控件库:MahApps.Metro。 项目介绍 MahApps.Metro 是一个开源、免费、Metro风格的 WPF UI 控件库,提供了现代化、平滑和美观的控件和样式,帮助开发人员轻松创建具有现代感的 Win…...
Spring Security 应用详解
Spring Security 应用详解 集成SpringBootSpring Boot 介绍创建maven工程spring 容器配置Servlet Context配置安全配置测试 工作原理结构总览认证流程认证流程AuthenticationProviderUserDetailsServicePasswordEncoder 授权流程授权流程授权决策 自定义认证自定义登录页面认证…...
业务对象和对象的区别
"业务对象"和"对象"这两个术语在日常编程和软件工程中经常被使用,但它们之间存在一些区别,主要体现在它们的目的、范围和抽象层次上。 ### 对象(Object) 1. **定义**: - 对象是面向对象编程&#…...
81,【5】BUUCTF WEB [b01lers2020]Life on Mars
进入靶场 怎莫颠颠的,一下子就想到展博了 先把左边的挨个点一遍 在最后一个有点收获 不过也没其他收获了 这种进去给个正常网页的题目,基本都靠url获取信息了 抓包看看有没有其他信息 竟然没有任何信息 自闭了 看别人的wp去咯 为什么别人抓到的包里…...
华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程
华硕笔记本装win10哪个版本好用?华硕笔记本还是建议安装win10专业版。Win分为多个版本,其中家庭版(Home)和专业版(Pro)是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势ÿ…...
Linux进程 -fork(初识),进程状态和进程优先级
目录 一、通过系统调用创建进程-fork 1.fork的介绍 2.fork的理解 3.fork常规用法 4.fork的三个问题 5.创建多个子进程 二、进程状态 (1)Linux内核源代码 (2)进程的状态 R运行状态(运行态) S 睡眠状态&…...
数据从前端传到后端入库过程分析
数据从前端传到后端入库过程分析 概述 积累了一些项目经验,成长为一个老程序员了,自认为对各种业务和技术都能得心应手的应对了,殊不知很多时候我们借助了搜索引擎的能力,当然现在大家都是通过AI来武装自己。 今天要分析的话题是…...
macOS如何进入 Application Support 目录(cd: string not in pwd: Application)
错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…...
第38周:猫狗识别 (Tensorflow实战第八周)
目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…...
【2024年华为OD机试】 (A卷,200分)- 计算网络信号、信号强度(JavaScriptJava PythonC/C++)
一、问题描述 题目解析 问题描述 我们有一个 m x n 的二维网格地图,每个格子可能是以下几种情况之一: 0:表示该位置是空旷的。x(正整数):表示该位置是信号源,信号强度为 x。-1:表示该位置是阻隔物,信号无法直接穿透。信号源只有一个,阻隔物可能有多个。信号在传播…...
【go语言】数组和切片
一、数组 1.1 什么是数组 数组是一组数:数组需要是相同类型的数据的集合;数组是需要定义大小的;数组一旦定义了大小是不可以改变的。 1.2 数组的声明 数组和其他变量定义没有什么区别,唯一的就是这个是一组数,需要给…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
