【STM32】仿真器STLink&JLink的使用

0 缘起

  前段时间一直在用的ST-Link突然出问题了,想着不能随便浪费了,于是试图拆开设备看看内部是怎么实现的,以下是折腾记录。

1 记录

  仿真器可以说是开发STM32非常有用的工具之一了,之前我一直是在用那种十几块钱的STLink v2模块,如下图所示。

请添加图片描述

但是最近在使用它的时候,直接不能识别USB设备了。。。。

在这里插入图片描述

说实话,看到这个我基本觉得这个STLink寄了,上网一搜,发现这种STLink是盗版的,稳定性不行,可能今天用着明天就坏了。。。但是,我还是本着好奇的想法,把这个STlink拆开了,直接拔掉它外表的套子就行。

请添加图片描述

然后意外发现其核心芯片竟然就是STMF103C8U6(和常见的C8T6不一样的地方只有封装,它的焊盘相对更短),而且还预留了四个引脚,(用万用表的通断档对照C8T6的引脚测了一下,发现就是VCC,SWIO,SWCLK,GND四个引脚)感觉和一般的单片机开发板没什么区别,于是就想着用另一个好的STLink来下载程序,于是,一晚上的折腾就开始了。。。
  首先是发现新买的STLink竟然显示无法连接!一开始以为是坏STlink导致的,然后插回好的C8T6的开发板,竟然还是无法连接!!!当时就觉得是不是这个新的STLink也有问题,然后照着报错信息(包括没有检测到目标板、内部指令错误等问题)在网上找了一通,各种教程都试了,都不好使,于是又试了一下另一个Jlink,发现可以检测到,但是无法下载程序,当时就懵逼了,以为这些仿真器都坏掉了。。。总之当时心情非常糟糕,也就没再研究了。第二天白天脑子清醒了再去试,这才基本搞懂了之前遇到的问题。

2 总结

  故事到此结束,一些感受和总结:

  • 如果实在解决不了问题,建议和朋友一起看或者等自己脑子清醒、心态平和的时候再仔细研究一下,这点很重要!
  • 网上买的那种便宜的STLink确实稳定性不好,(也不保证贵的一定好)很有可能突然就出现类似于我遇到的问题,所以最好有备件可用。

3 基本使用【重点】

3.1 基本概念

  在了解仿真器的基本使用前,首先要区分一些基本的概念。

  • 仿真调试的协议/端口
    尽管支持仿真的设备很多,但其实使用的协议大抵都是一样的。主要有两种:JTAGJoint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试;还有一种是SWDSerial Wire Debug,串行调试)。
    其中JTAG协议并没有确定的引脚和端口,目前网上流传的20pin的端口是SEGGER公司的jlink定义的JTAG接口。,如下图所示

在这里插入图片描述

可以看到,JTAG主要有这些信号:TDI,TMS,TCK,TDO,分别对应数据输入,模式选择,时钟,数据输出,复位管脚可不接。
  而SWD接口相对简洁一些,只需要两个信号:SWDIO,SWCLK,分别对应数据和时钟。

  • 仿真器型号
    基于以上协议,产生了很多支持这些协议的调试仿真设备。如ST-Link(ST官方出品),Jlink(SEGGER公司出品),ULink(ARM/KEIL公司出品)等,有些只支持一种协议,有些两种协议都支持,需要根据设备手册来判断。

  • 参考电平VTref
    从上面这张图可以看出,两种接口都有VTref引脚,这个引脚必须连接,目的是为了使芯片逻辑电平与调试器的逻辑电平一致,避免逻辑错误,甚至对设备造损坏。因此,这个引脚一般连接芯片的VCC,但不能靠VTref引脚来供电,而是需要额外的供电。
    在Jlink中,可以通过眺帽对这个参考电压的引脚进行设置,如下图所示。

在这里插入图片描述

3.2 使用方法

  熟练掌握使用方法是避免很多问题和疑惑的最好途径。
  首先将仿真器连接到开发板,注意供电的问题,另外boot引脚记得设置好,一般是设置成从主闪存运行

在这里插入图片描述

然后打开一个Keil项目,点击魔法棒,在Debug页面中选择使用的仿真器型号,再点击旁边的settings按钮,如下图所示。

在这里插入图片描述

以STLink为例,如果你①插上了STLink;②安装了STLink的驱动;③STLink与目标板接线没有问题;④目标开发板上电了,那么在settings中就能看到检测到的目标板芯片的型号。如果没有的话,就按照上面的顺序依次检查吧。

在这里插入图片描述

另外,还需要注意的是下面的port选项,到底是选择SWD协议还是JTAG协议。

  • 仿真器下载完程序不执行?
    这是很多初学者可能会遇到的问题,其实也是仿真器的设置没弄好,参考以下设置即可解决。

在这里插入图片描述

在这里插入图片描述

> **注意**:这里两步都要设置!
  • 拓展:STLink上面的四个接口是什么?
      在使用那种白色的STLink时,突然好奇上面的四个引脚是什么?即下图的红色框中的引脚。

在这里插入图片描述

一开始猜测是类似于那种小型的STLink的四根线,但是通过查找资料发现并不是,它是SWIM协议,一般用于仿真调试STM8芯片。找资料的过程中,顺便找了一张引脚图,如下所示。

在这里插入图片描述

4 高级使用——仿真【也是重点!】

  之前对仿真器的认识其实一直还停留在下载程序上面,但是最近才发现其实仿真调试功能才是最好用的。
  使用方法也很简单,以Keil为例,正常连接仿真器,然后直接点击右上角的红色debug按钮即可。

在这里插入图片描述

这个默认会从main函数开始仿真,然后一般点击左上角的几个按钮即可。

在这里插入图片描述

从左至右分别是步入(如果有函数调用,会进入到函数实现,“向内挖掘”),步进(当前跳过下一语句,“平级跳过”),步出(跳出当前域,如果进入到某个函数执行过程中,步出可以回到该函数调用的位置,“向外跳出”),运行到光标所在位置

  此外,右下角窗口是监视窗口,主要用于查看程序执行过程中的变量

在这里插入图片描述

如果右下角监视窗口看不到的变量,可以在编辑器上对应变量上面右键,将其添加到监视窗口,如下所示。
在这里插入图片描述

  除此之外,在debug进入到某些函数中时,所定义的局部变量在右下角显示<not in scope>,这是因为编译器把代码优化掉了,直接导致在仿真过程中变量根本没有分配内存,也就无法查看变量值
  解决办法很简单,就是在变量定义前加上volatile关键词,这样程序在读取该变量时一定会从内存中读取,而不是cpu的寄存器。

参考链接

5 遇到的问题和解决办法

5.1 使用JLink提示“the connected j-link is defective”

  这个问题也是那天测试JLink时遇到的,这个问题是Jlink固件和驱动不匹配,一般是固件版本低于驱动版本,因此解决这个问题也是两种方法:升级固件或者降低驱动等级。但是听说升级Jlink固件可能会造成不可逆的后果,而且操作也比较麻烦,所以一般是采用降低驱动等级的方法。参考这个教程可以下载到更低版本的驱动,然后替换掉Keil安装目录下(Keil_v5/ARM)的Segger文件夹即可。
  但是!需要注意!!! 在替换根目录下的文件夹时,一定一定一定要先备份,因为很有可能替换之后你的Keil就打不开了,或者是闪退,这样你就得重装一遍,非常麻烦!
  相比于自己一个一个版本去试,更方便的还是在网上下载那种已经确定可以用的文件夹,这里推荐一个资源。没有币的可以考虑一下某宝。

5.2 拓展:如何修复STLink或者自己自制一个STLink

  在遇到前文提到的那个USB设备无法识别的问题之后,我当时有点不甘心,想着有没有什么方法可以复原它,在网上找了很多资料,这里简单总结一下,有兴趣的朋友可以按照教程试一下。

使用J-Link仿真器时,以下是一些基本的使用教程: 1. 准备工作: - 从Segger官方网站上下载并安装J-Link软件和驱动程序。 - 将J-Link连接到计算机上,可以通过USB线缆连接到计算机的USB接口。 2. 连接目标设备: - 使用适当的连接器将J-Link连接到目标设备上的调试接口。这可能是JTAG、SWD或其他接口类型,具体取决于目标设备的架构和支持。 - 在连接之前,确保目标设备的电源已打开,并且与J-Link之间的电气连接正确。 3. 配置J-Link软件: - 打开J-Link软件(J-Link Commander或J-Link Configurator)。 - 在软件界面中,选择正确的目标设备和接口类型。 - 如果需要,可以配置其他选项,例如时钟频率、调试模式等。 4. 连接到目标设备: - 在J-Link软件中,选择连接命令(Connect)。 - J-Link将尝试与目标设备建立连接,并显示连接状态信息。 - 如果连接成功,您可以继续进行后续操作,例如下载程序、调试代码等。 5. 下载程序: - 在J-Link软件中,选择下载命令(Download)。 - 指定要下载的程序文件(通常是一个可执行文件或固件文件)。 - J-Link将把程序文件下载到目标设备上的内部存储器中。 6. 调试代码: - 在J-Link软件中,选择调试命令(Debug)。 - J-Link将与目标设备建立调试连接,并启动调试会话。 - 您可以使用J-Link软件提供的调试功能,例如断点设置、寄存器查看、变量跟踪等来调试目标设备上的代码。 请注意,以上步骤只是基本的使用教程,实际操作可能会因不同的开发环境、目标设备和需求而有所差异。建议您参考J-Link仿真器的用户手册和Segger官方网站上的文档,以获取更详细和特定的使用指导。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录无知岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值