动机

keil软件的功能强大,但代码编辑却又显得古板和不方便。vscode作为专业的轻量级代码编辑工具,汇集了大量插件辅助。因此试着考虑将stm32的开发往vscode上进行迁移。

前期调研和测试了多种插件方案,包括Keil Assistant, EIDE, stm32-for-vscode等。也尝试过自己搭建工具链,包括arm-none-eabi,make,openocd等。配合st-link和jlink可以完成编译,下载和调试。最后选择了对自己而言最轻量化的方案,具有极简的配置过程。

由于细致讲解内容太长,因此简化过程,将整体思路带过一下。


概览

所需工具

  1. 硬件调试器 jlink
  2. 代码编辑器 vscode
  3. stm32代码配置生成软件 stm32cubemx
  4. 程序下载软件 jflash
  5. 程序调试软件 ozone

配置环节

  1. 在.vscode文件夹中放一个tasks.json文件(后期直接复制修改工程名即可)
  2. 在工程文件夹下面放一个名为jflash.jflash的工程文件(后期直接复制即可)
  3. 在工程文件夹下面放一个名为ozone.jdebug的工程文件(后期直接复制即可)

如图:




配置

安装arm-none-eabi工具链

arm-none-eabi 10.3版本下载

安装或者下载zip文件解压,然后将里面bin文件夹的地址放到环境变量中。

该工具链有很多版本,最新的是14.2.rel1,但是体积大,编译慢点,推荐经典的10.3版本。

注意:10.3版本编译的时候可能会有.ld文件问题,需要将“(readonly)”替换成“()”即可。或者下载11以上的版本。


安装make工具

MinGW-w64下载

 我下载的make是3.81的版本,下载后将里面bin文件夹的地址放到环境变量中。


安装stm32cubemx

stm32cubemx下载

注册填写后下载安装


安装jlink系列软件包

jlink软件包下载


补充:上方过程网上有很多教程,不再赘述。


开发

生成makefile工程

stm32cubemx软件中最后的工程生成方式选择makefile


vscode配置

在.vscode文件夹中增加tasks.json文件,其中放入四个命令

  1. build
  2. rebuild
  3. jlink-flash
  4. jlink-debug-ozone

具体代码如下 (用的stm32f103c8t6芯片案例)

1.build部分

		{
			"type": "shell",
			"label": "build",
			"command": "make",
			"args": [
				"-j16"
			],
            "problemMatcher": [],
		},

2.rebuild部分 

		{
			"type": "shell",
			"label": "rebuild",  // clean+build
			"command": "rmdir -r build; make -j16" ,
            "problemMatcher": [],
		},

其实就是删除build文件夹,然后重新生成build文件夹

3.jlink-flash

		{
			"type": "shell",
			"label": "jlink-flash",
			"command": "JFlash",
			"args": [
				"-openprj", "jflash.jflash", // 注意这个文件需要准备好
				"-open", "${workspaceFolder}/build/xxx.hex,0x8000000",  // 修改xxx为当前工程名
				"-auto",
				"-startapp",
				"-exit"
			],
			"problemMatcher": [],
    	},

4.jlink-debug-ozone

		{
            "type": "shell",
            "label": "jlink-debug-ozone",
            "command": "ozone",
            "args": [
                "-project", "${workspaceFolder}/ozone.jdebug", // // 注意这个文件需要准备好
                "-device", "stm32f103c8",  // 指定芯片
                "-programfile", "${workspaceFolder}/build/xxx.elf"  // 修改xxx为当前工程名
            ],
            "problemMatcher": [],
        }

5. 完整代码 

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "build",
			"command": "make",
			"args": [
				"-j16"
			],
            "problemMatcher": [],
		},

		{
			"type": "shell",
			"label": "rebuild",  // clean+build
			"command": "rmdir -r build; make -j16" ,
            "problemMatcher": [],
		},

		{
			"type": "shell",
			"label": "jlink-flash",
			"command": "JFlash",
			"args": [
				"-openprj", "jflash.jflash", // 注意这个文件需要准备好
				"-open", "${workspaceFolder}/build/xxx.hex,0x8000000",  // 修改xxx为当前工程名
				"-auto",
				"-startapp",
				"-exit"
			],
			"problemMatcher": [],
    	},

		{
            "type": "shell",
            "label": "jlink-debug-ozone",
            "command": "ozone",
            "args": [
                "-project", "${workspaceFolder}/ozone.jdebug", // // 注意这个文件需要准备好
                "-device", "stm32f103c8",  // 指定芯片
                "-programfile", "${workspaceFolder}/build/xxx.elf"  // 修改xxx为当前工程名
            ],
            "problemMatcher": [],
        }
	]
}

6.快捷方式

为了点击命令按钮方便,可以下载Task Runner插件

效果如下:

 


使用方式

1.在makefile中增加c的源文件和h头文件地址(如果有的话)

2.点击build按钮完成编译

3.点击jlink-flash按钮完成下载(自动弹出jflash软件窗口,下载很快)

4. 点击jlink-debug-ozone按钮实现调试(自动弹出ozone软件窗口,每次build后都会提示文件更新,不用每次重新点击jlink-debug-ozone按钮,调试很方便)

补充

可能有小伙伴喜欢全程在vscode中使用,这里补充launch.json的配置代码。(使用的时候只需要修改当前工程文件名即可)

vscode内部调试

1.launch.json配置代码(需安装cortex-debug插件)

{
    "configurations": [    
        {
            "showDevDebugOutput": "parsed",
            "cwd": "${workspaceRoot}",
            "executable": "${workspaceFolder}/build/xxx.elf",  // 修改文件名
            "name": "JLink",
            "request": "launch",
            "type": "cortex-debug",
            "runToEntryPoint": "main",
            "servertype": "jlink",
            "interface": "swd",
            "preLaunchTask": "build",
            "device": "stm32f103c8",  // 修改芯片型号
            "svdFile": "STM32F103xx.svd", // 用于查看外设寄存器
            "liveWatch": { // 实时查看变量
                "enabled": true,
                "samplesPerSecond": 4
            },
        },      
    ]
}

2.使用方式

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐