在 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 -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
# 项目参数
$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
文件
填入以下内容:
{
"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"
}
}
]
}
原文地址:https://blog.csdn.net/qq_36148047/article/details/145279195
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!