你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32开发之 VS Code + GDB下载调试

[复制链接]
STMCU 发布时间:2020-10-10 10:02
STM32开发之 VS Code + GDB下载调试


一、软件下载
OpenOCD:
https://gnutoolchains.com/arm-eabi/openocd/
一个开源的片上调试器(Open On-Chip Debugger)。在其他平台上,OpenOCD是要自己 Configure并且自己编译的,但是 Windows平台上提供了编译好的二进制文件,所以只需要下载下来后随便解压出来就好了。安装完成后添加系统环境变量,可以利用 cmd命令:openocd -v测试。

二、搭建调试链接
在这里需要说明的是,OpenOCD文件夹下的 share/openocd/scripts 里面放的就是 openocd在运行时所需要用到的各种配置文件,其中 interface文件夹下放的是关于调试器的配置文件,而 target文件夹放的是目标平台的配置文件,这里我们需要的是 interface/stlink.cfg 和 target/stm32l1.cfg,不过不需要复制出来。注:stm32l1.cfg是要选择你的目标芯片对应的文件,可以进入 ...\OpenOCD-20200729-0.10.0\share\openocd\scripts\target路径下查找。

连接好 STLink和板子,如果板子的调试接口正常的话;然后在终端控制台里键入命令:openocd -f interface/stlink.cfg -f target/stm32l1.cfg 回车,得到以下信息,即搭建了一个 GDB Server,连通了硬件调试器和 GDB,通过 USB和硬件调试器连接,并且通过 TCP和 GDB连接:
2.png
三、下载配置
当你能正确实现以上操作时,那么,关闭终端显示的窗口,使之退出搭建的 GDB Server链接;然后回到 tasks.json文件里,在原本的 “tasks” 任务标签里再追加以下内容:

  1. {
  2.    "dependsOn":"Build",          // 任务依赖
  3.    "label": "Build and Download",
  4.    "type": "shell",
  5.    "command": "openocd",
  6.    "args": [
  7.    "-f",
  8.    "interface/stlink.cfg",
  9.    "-f",
  10.    "target/stm32l1.cfg",
  11.    "-c",
  12.    "program ./build/${workspaceFolderBasename}.elf verify reset exit"
  13.   ],
  14.    "problemMatcher": []
  15. }
复制代码


最后变成:
3.png
这个任务要求先进行 Build任务,然后通过命令打开 openocd,加载两个配置文件(-f interface/stlink.cfg 和 -f target/stm32l1.cfg),同时,这个 -c 的选项后面跟着的就是openocd成功加载后执行的内置命令,这里我们让它下载、验证、reset,然后直接退出,这样就实现了一条龙式的下载。运行这个任务的方法就跟 Build一样,在此就不过多介绍了,最后运行该任务你会发现,这小破板跑起来。
这里其实是经过了进入调试处理的操作,只不过我们让它自动退出了调试模式而已;因为下载和调试的区别是,下载只是把代码加载到芯片里,而不进行调试,也不会切换到调试页面,其实调试就已经会将代码下载到板子上了,所以这里所设置的下载,其实并不是单纯的下载,而是经过了进入调试,退出调试这样的操作,使我们人为的觉得是下载操作。



四、调试配置
在窗口里点击 运行 -> 添加配置:

4.png
接着,如果根据上一篇安装了 Cortex Debug插件,就会出现如下选项(ps:如果窗口打开的是 .c文件或者 .h文件,只会显示前面两个选项,不知道是我电脑问题还是咋的,可以试着切换打开到 .json文件或者打开 makefile文件):
5.png
点击框选的选项,在 .vscode文件里会创建一个 launch.json文件,然后把里面的内容修改成以下样子:

  1. <font size="3">{
  2.    // 使用 IntelliSense 了解相关属性。
  3.    // 悬停以查看现有属性的描述。
  4.    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  5.    "version": "0.2.0",
  6.    "configurations": [
  7.       {
  8.            "name": "Cortex Debug",
  9.            "cwd": "${workspaceRoot}",  // 输出路径
  10.            "executable": "./build/${workspaceRootFolderName}.elf",    // 要调试的程序
  11.            "request": "launch",
  12.            "type": "cortex-debug",
  13.            "servertype": "openocd",    // 调试器选择
  14.            "device": "STM32L151CB",    // 使用J-link GDB Server时必须;其他GBD Server时可选(有可能帮助自动选择 SVD文件)。支持的设备见 https://www.segger.com/downloads/supported-devices.php
  15.            //"svdFile": "./STM32L15xC.svd", // svd文件,有这个文件才能查看寄存器的值,每个单片机都不同。可以在以下地址找到 https://github.com/posborne/cmsis-svd下载
  16.            "interface": "swd",
  17.            "configFiles": [
  18.                //"${workspaceRoot}/openocd.cfg",// *可以通过加载该文件来配置
  19.                "interface/stlink.cfg",
  20.                "target/stm32l1.cfg"
  21.           ],
  22.            "runToMain": false,
  23.            "preLaunchTask": "Build",   // 在调试前预先执行的任务,此处是tasks.json中的
  24.            //"armToolchainPath": "C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin"   // 如果没有把 arm工具链路径添加到系统环境变量,则需要这条指令添加你的路径
  25.       }
  26.   ]
  27. }</font>
复制代码


这里主要就是指定 preLaunchTask,顾名思义就是先运行某个任务后再启动调试,我们这里要先运行前面配置的 Build 任务,意为先编译再进行调试操作;servertype 调试器这里,我们就使用 openocd 就好了,因为它支持各种不同的调试器,若是仅使用Jink,不用其他的调试器,那么,你可以改成 jlink,然后参考:https://zhuanlan.zhihu.com/p/163771273;device 是指定 STM32的芯片型号,如果支持,则可以帮助调试器显示外设寄存器的值;configFiles 就是前面说到需要加载的那两个配置文件了(类似于键入命令:openocd –f interface/jlink.cfg –f target/stm32f4.cfg);runToMain 就是选择程序是从 main函数开始加载,还是从汇编代码开始加载,stm32启动都是从 startup_stm32xxx.s开始的,所以这里得选择 false。
然后在这里说一下,在configFiles 中,注释了一行,在正常情况下,如果我们不带参数启动(即所谓的单纯键入命令:openocd),openocd就会默认自动查找当前目录下有没有名为 openocd.cfg的文件,并把它作为配置文件来启动。若是你想在利用 openocd.cfg来加载配置,那么就要在工程路径下(对应你在 configFiles所填的路径文件)创建一个 openocd.cfg文件,并添加以下内容:

  1. <font size="3"># 选择调试器为JLink or CMSIS-DAP or STlink
  2. #source [find interface/jlink.cfg]
  3. #source [find interface/cmsis-dap.cfg]
  4. source [find interface/stlink.cfg]

  5. # 选择接口为SWD,jlink下打开
  6. #transport select swd

  7. # 选择目标芯片
  8. source [find target/stm32l1.cfg]</font>
复制代码


实际上并不推荐这种方式,因为又要创建,又把 launch.json的配置分开了,当整体移植 .vscode文件夹并更换目标芯片时容易出现漏改参数。
五、DEBUG调试
在配置完成以上的 launch.json调试参数后,点击窗口 运行 -> 启动调试(或者直接按 f5),就可以进入 debug模式了:

6.png


文章出处: Arachnid

收藏 1 评论0 发布时间:2020-10-10 10:02

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版