在 vscode + cmake + GNU 工具链的基础上配置 JLINK

JLINK 官网链接

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

将此路径添加到环境变量的 Path 中。

创建 JFlash 项目

打开 JFlash,选择新建项目

选择单片机型号

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

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

新建完成:

接下来设置一下项目

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

最后保存工程

编写 powershell 脚本

新建一个脚本叫 jlink-release-download.ps1

powershell 复制代码
# 项目参数
$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 -j12
	if ($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_arg

	Start-Process -FilePath "JFlash.exe" `
		-ArgumentList $jflash_arg `
		-WindowStyle Normal `
		-Wait

	if ($LASTEXITCODE)
	{
		throw "将 ${project_name}.bin 下载到单片机失败。"
	}

	Write-Host "将 ${project_name}.bin 下载到单片机成功。"
}
finally
{
	Pop-Location
}

项目参数部分根据实际情况修改。

为 DEBUG 配置也创建一个 powershell 脚本,叫作 jlink-debug-download.ps1

powershell 复制代码
# 项目参数
$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 -j12
	if ($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_arg

	Start-Process -FilePath "JFlash.exe" `
		-ArgumentList $jflash_arg `
		-WindowStyle Normal `
		-Wait

	if ($LASTEXITCODE)
	{
		throw "将 ${project_name}.bin 下载到单片机失败。"
	}

	Write-Host "将 ${project_name}.bin 下载到单片机成功。"
}
finally
{
	Pop-Location
}

创建 task.json

在 vscode 项目根目录下的 .vscode 目录创建 task.json 文件

填入以下内容:

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 文件

填入以下内容

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

json 复制代码
{
	"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"
			}
		}
	]
}
相关推荐
何雷 — 智能网联汽车6 小时前
vscode在win10上安装modelscope库的C盘缓存优化方法
vscode·cache·win10·modelscope·软链接
寻梦人121389 小时前
Vite管理的Vue3项目中monaco editer的使用以及组件封装
前端·javascript·vue.js·vscode
蒋星熠9 小时前
关于在vscode中的Linux 0.11 应用程序项目的生成和运行
linux·ide·vscode
天机️灵韵13 小时前
Java动态生成Word终极指南:poi-tl与Aspose.Words性能对比及选型建议
java·vscode·word·模板
青花瓷14 小时前
Windows下VSCode的安装
ide·vscode·编辑器
冰凉小脚15 小时前
vscode 插件推荐
ide·vscode·编辑器
背影疾风16 小时前
C++学习之路:从头搞懂配置VScode开发环境的逻辑与步骤
c++·vscode·学习
还是鼠鼠19 小时前
Node.js 模块加载机制--详解
java·开发语言·前端·vscode·前端框架·npm·node.js
Jason-nb1 天前
vscode + latex workshop + sumatraPDF
ide·vscode·编辑器·latex
muzidigbig1 天前
vscode将文件中行尾默认CRLF改为LF
vscode·eslint报错