针对不同的仿真器使用 OpenOCD 时候的设置操作总结 ...... 矜辰所致
前言
在使用 GCC 环境开发 ARM 系列芯片的时候,我们往往会配合使用 OpenOCD 来进行仿真调试下载,博主自己在 Windows 下开发常用的 STM32 等芯片的时候也是使用的这套方案。
这个环境的搭建在我曾经的博文:在window下使用 VScode 搭建 ARM 开发环境—— 详细版
中详细说明过,当时好些年前设置好的环境,最近换了新电脑,然后环境重新配置,又因为仿真器又有好几个不一样的,所以得重新配置一下不同的仿真器。
所以就想到写下本文,来汇总记录一下 不同的仿真器的设置使用, 方便以后再次更换环境时候能更快速的搭建好环境,当然本文是以下载为主,以 Windows 下的 GCC 开发环境为说明。
一、OpenOCD 环境搭建
OpenOCD(Open On-Chip Debugger)是开源片上调试器,过多的我们这里就不介绍了,以前也介绍过,环境配置以前也说明过,这里我们简单复习一下。
首先是下载 OpenOCD :OpenOCD 官方下载地址
下载下来的是压缩文件,可以直接解压,比如我解压的位置如下:
接下来就是配置环境变量,具体操作如下图所示(win10 家庭版):
最后只需要在我们的 终端中输入openocd -v
有版本信息提示,就表示环境配置成功:
二、OpenOCD 基本测试
我们可以通过 openocd -h
查看帮助选项:
我们接下来就连接上仿真器来说明一下,但是前提是安装好了仿真器驱动:
安装好驱动后:
我们下面直接来做基本的测试,为了方便测试,我们在目录下 D:\Program Files\OpenOCD-20211118-0.11.0\share\openocd\scripts
打开终端,如下图:
在此路径下打开终端进行操作,在后面选择配置文件的时候相对方便一下,因为文件的路径就不用写很多了。
打开后,也是一个终端:
我们先简单的定义一下接口,如下图:
上面为什么使用 interface 选择,我也是参考网上一些说明教程,也可能是 openocd 的早年版本是使用 interface 的,这目前来说不是我们的重点,所有的问题这里都会有提示,我们根据上面的提示进行修改,如下:
最后提示 Error ,这里暂时先不管。
这里重点我们要知道的是,openocd 对于各种仿真器,和用哪种单片机都已经写好了配置文件。基本上我们使用 openocd 我们都不用自己去写,只需要调用现成的配置文件就可以了。
那么好了,配置文件怎么使用,上面我们说到了 -f
是使用配置文件,我们直接按照如下操作进行:
这里实际上我们就可以看到正常的进入的调试模式,直接调用配置文件看来是可以的。
但是我们的目的是什么?是烧录文件,所以我们还要使用 -c 执行 program
命令,我们这里简单总结一下
openocd的操作模式
openocd -f <接口配置文件> -f <目标芯片配置文件> -c <要执行的命令>
我们把需要烧录的 hex 文件拷贝到当前文件夹下(为了测试方便),如下图:
我们使用如下指令进行程序烧录测试:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x.cfg" -c "program test.hex" -c "reset"
因为 test.hex
已经放到当前目录下,所以这里可以直接选择,然后后面的 -c "reset"
是软件复位,就是程序烧录完成以后自动复位运行, "reset"
有没有双引号都可以,上面指令也可以是
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x.cfg" -c "program test.hex" -c reset
测试如下图:
上图中最后不会退出的问题,我们可以在指令的最后加上一条指令:-c shutdown
关闭当前的操作(因为烧录结束了不需要操作了)
最后的指令:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x.cfg" -c "program test.hex" -c reset -c shutdown
最后测试的完成现象如下图:
三、Makefile 中仿真器配置
上面我们通过基本的测试,我们已经成功的把 hex 文件烧录到了 STM32 芯片中,但是上面也只是测试,我们在开发 STM32 的时候不可能每次都重复的使用上面的操作进行烧录,那样太繁琐了。
所以我们需要进行一些基本的设置,基于我们是使用 GCC 开发环境,所以我们可以在 Makefile 中进行一些必要的设置,使得能够直接相对 “简单” 的进行烧录。
Makefile 文件我们只需要使用 STM32CubeMX 生成的工程就可以。
3.1 ST-link
上面我们就是使用的 ST-Link 进行的测试,所以只要设置得当,肯定是没有什么问题的。
指令实际上还是和上面的指令一样,只不过在 Makefile 中需要加上绝对路径下面是完成的操作图:
3.2 Jlink
有了上面成功的操作,对于 Jlink 来说按理来说也只需要选择一下对应的配置文件就可以了,但是实际上是有问题的,如下图:
JLink 需要使用指令-c "transport select swd"
选择使用 SWD 模式,对于现在开发来说,基本都是使用的 SWD 模式。
但是最后还是有问题的,这个原因其实以前我已经说过了,详细的情况还是参考博文:在window下使用 VScode 搭建 ARM 开发环境
的 第 7 小节:7、使用 Jlink 烧录问题说明
具体的内容大家自行跳转查看。
其实 JLink 的这部分使用,内容还是比较多的,而且 Jlink 更换驱动以后不仅 Keil 中无法识别的,J-Link 配套的那些软件也是无法识别出来的,虽然可以换来换去,也免不了麻烦,所以要根据自己实际的应用环境确定是否需要更换驱动。
3.2 CMSIS-DAP(待更新)
好吧,本来以为仓库中有个烧录器是 CMSIS-DAP ,想着也可以来记录一下,后来发现还是 ST-link,那么 CMSIS-DAP 今天是更新不了了,等下次有机会用到的时候再来更新把,或许自己什么时候也去做一个。
…(待更新)
结语
本文在 Windows 环境下测试使用了 OpenOCD 的程序烧录,也说明了如何在 STM32CubeMX 生成的工程 Makefile 中如何使用 OpenOCD 进行一键下载。
当然在 Linux 环境下也是一样的,只需要注意一下对应的路径设置。
虽然少了 CMSIS-DAP 的测试,但是从网上很多同学的测试使用情况来看,CMSIS-DAP 也是比较正常的,和 ST-Link 一样的简单,不像 J-LInk 那么不太友好,这一点我后面一定会找机会给补上的。
那么,本文就到这里把,谢谢大家!