【win10用vim开发stm32】二、vimspector的单片机调试

▲ 我的vim配置仓库: gitee,vim相关优先在gitee更新,博客vim专栏作为部分补充和使用说明

▲ 本文提供vimspector调试的一个示例,和keil的调试功能比当然还是有很大差距,不过简单的调试功能如单步、复位、运行这些都跑通了,编译,下载也可以,vim终于还是成为了IDE。。。

▲ linux上软件兼容性和配置要比windows好很多

▲ 其他废话(与本文无关,可以不看):想用neovim的,但windows下nvim-treesitter一旦安装c的语法高亮就会崩溃,连checkhealth都运行不了,还有些其他显示问题不清楚怎么解决,在不同电脑上尝试过很多次都是这样,无奈下又换回了gvim,还挺喜欢Astro Nvim这个配置的,有清楚为什么的小伙伴可以留言或私信。让子弹飞吧。。。。

文章目录

一、环境和依赖项

  • gvim9.0+,一些依赖和安装可以参考我的仓库说明

  • vimspector,在vim内安装调试器

    bash 复制代码
    :VimspectorInstall -enable-c
  • 字体,推荐我仓库里面的hack字体,测试所有图标终端下都显示正常,并不是所有nerd font字体都能正常显示大多图标集。。

  • openocd,在使用vim调试前需要在终端打开一个硬件调试器连接,这里使用stlink,当然其他的如jlink/dap等都是支持的,具体使用也有不少内容,可以参考openocd文档。这里贴上一条命令参考(直接把配置文件拷到工程目录下了):

    bash 复制代码
    openocd -f stlink.cfg -c 'transport select hla_swd' -f stm32f1x.cfg
  • arm-none-eabi-gcc,编译调试工具集

  • makefile 工程,我使用stm32,makefile用cubeMX生成还是挺方便的。

  • 其他

    • openocd也是可以替换的,如stlink的st-util,和jlink的gdbserver,不过这样一些配置指令也要再适配

二、vimspector配置

  • 在根目录创建.vimspector.json文件,内容如下,根据自己需要调整:
json 复制代码
{
    "configurations": {
        "Launch STM32": {
            "adapter": "vscode-cpptools",
            "configuration": {
				"type": "cppdbg",
                "request": "launch",
                "program": "${workspaceRoot}/build/f103.elf",
                "cwd": "${workspaceRoot}",
                "targetArchitecture":"arm",
                "MImode": "gdb",
				"stopOnEntry": true,
				"stopAtConnect":true,
                "MIDebuggerPath": "C:\\GreenSoft\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe",
                "setupCommands":[
                    { 
						"description":"connect",
						"text": "target extended-remote :3333" 
					},
                    { 
						"description":"reset halt 0x08000000",
						"text": "monitor reset"
					},
                    { 
						"description":"init",
						"text": "monitor reset init"
					}
                ],
 				"launchCompleteCommand": "exec-run",
                "breakpointers": {
                    "exception": {
                        "cpp_throw": "Y",
                        "cpp_catch": "N"
                    }
                }
            }
        },
        "Launch STM32 with loading elf": {
            "adapter": "vscode-cpptools",
            "configuration": {
				"type": "cppdbg",
                "request": "launch",
                "program": "${workspaceRoot}/build/f103.elf",
                "cwd": "${workspaceRoot}",
                "targetArchitecture":"arm",
                "MImode": "gdb",
				"stopOnEntry": true,
				"stopAtConnect":true,
                "MIDebuggerPath": "C:\\GreenSoft\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe",
                "setupCommands":[
                    { 
						"description":"connect",
						"text": "target extended-remote :3333" 
					},
                    { 
						"description":"reset halt 0x08000000",
						"text": "monitor reset"
					},
                    { 
						"description":"halt",
						"text": "monitor halt"
					},
                    { 
						"description":"load elf",
						"text": "monitor program ./build/f103.elf"
					},
                    { 
						"description":"reset",
						"text": "monitor reset init"
					}
                ],
 				"launchCompleteCommand": "exec-run",
                "breakpointers": {
                    "exception": {
                        "cpp_throw": "Y",
                        "cpp_catch": "N"
                    }
                }
            }
        }
    }
}

vimspector提供了两套快捷键,使用自己喜欢的即可

bash 复制代码
let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
"let g:vimspector_enable_mappings = 'HUMAN'

enjoy~~

演示

  • 终端打开openocd调试端口,支持多终端的插件,这里使用powershell:

  • 编译

  • F5进入调试,选择配置,这里配置了1:直接调试,2:下载并调试。控制和下载命令参考openocd文档即可(setupCommands参数列表),出现异常可以尝试重开。。

  • 首次进入的提示直接确认即可,是否都不影响,注意每次编译完需要重新上传elf文件

  • 熟悉的调试界面,其实是支持鼠标操作的,下面也保留有命令行:

  • 断点,并且停止时鼠标悬停会指示其值(断点时灵时不灵,暂不清楚原因。。):

  • 代码提示补全

  • 语法错误提示

  • 符号导航

其他问题

  • clangd警告消除:
    • 提示硬件架构不支持FPU,在CFLAGS中加入编译指令CFLAGS += -mfloat-abi=soft(没有强迫症可不理会), 示例:
  • 优化等级调整,CFLAGS中配置,示例:

vscode调试配置

  • 一个vscode调试配置,c/c++插件其实可以和vim共用compile_commands.json文件,必要配置只有这个,对比起来确实更简单。。。
json 复制代码
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceFolder}",
            "executable": "./build/f103.elf",
            "request": "launch",
            "type": "cortex-debug",
            "runToEntryPoint": "main",
            "servertype": "openocd",
            "configFiles": [
                //"./stlink.cfg",
                "${env:openocdhome}/scripts/interface/stlink.cfg",
                "${env:openocdhome}/scripts/target/stm32f1x.cfg"
            ]
        }
    ]
}
相关推荐
清风66666621 小时前
基于单片机的多传感器智能云梯逃生控制器设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计
小何code21 小时前
STM32入门教程,第10课(上),OLED显示屏
stm32·单片机·嵌入式硬件
来自晴朗的明天21 小时前
高速画板-USB模块的PCB设计5-USB2.0/3.0布局布线要求
单片机·嵌入式硬件·硬件工程
早日退休!!!1 天前
ARM Cortex-M核 【保存上下文&恢复上下文】
arm开发·单片机·嵌入式硬件
来自晴朗的明天1 天前
差分控多少Ω阻抗
单片机·嵌入式硬件·硬件工程
SystickInt1 天前
mosbus复习总结(20260110)
stm32
点灯小铭1 天前
基于单片机的多功能智能婴儿车设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
π同学1 天前
基于RT-Thread的STM32开发第十一讲——编码器模式
stm32·rt_thread·双相编码器
码农小韩1 天前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
匠在江湖1 天前
裸机单片机任务调度器实现:基于规范分层(COM/APP/SRV/DRV)架构,(附 任务调度器 / 微秒延时函数 / 串口重定向 源码)
单片机·嵌入式硬件·架构