01、WHY

为什么要使用到J-LinkCommander呢???大部分情况下,我们使用J-link都是在IDE中debug使用的,出现问题,直接debug复现然后解决。这是最常见的开发方式。

但是有些情况我们不能使用IDE直接debug,比如发布版本(JTAG或SWD接口可以正常使用),大批量生产时发现几片异常的板子,重新debug问题就消失了。

这个时候使用IDE直接debug已经不能解决问题,我们需要使用J-LinkCommander读取关键寄存器的值来协助我们定位排查问题。

02、Jlinkcmd使用

Jlinkcmd它可以方便用户在非仿真的情况下,hold内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等,方便大家拥有最高的权限查看在运行中的MCU情况,查找非IDE仿真情况下,MCU运行异常的原因。

打开Jlinkcmd,如果单独安装了jlink驱动,我们可以在开始菜单找到Jlinkcmd。

或者在安装目录中找到它

如果你们有独立安装Jlink驱动,同样也可以在Keil的安装目录中找到它

首先使用Jlink连接好MCU,打开软件“Jlink.exe

按照提示输入相应信息connect->?->s->回车(旧版只需要输入usb即可连接目标芯片

正确的链接目标芯片后:

如上图所示,选项字节里为"5AA5"即为无保护状态。

Jlinkcommand常用命令简介:

mem 读内存

mem8 读8字节内存

mem16 读16字节内存

mem32 读32字节内存

w1 写8字节内存

w2 写16字节内存

w4 写32字节内存

h 停止cpu运行的程序

setbp 设置断点

g 跳到代码段地址执行

s 单步执行(调试用)

r 复位

03、实测

接下来就是实测环节,我们通过一个真实的例子演示一下Jlinkcmd的使用。在之前文章《STM32延时函数的四种方法》中有以下代码​

void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick->LOAD = RCC_Clocks.HCLK_Frequency/1000/8*nms;
SysTick->VAL=0X00;//清空计数器
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
do
{
temp=SysTick->CTRL;//读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}

调用示例

  while (1)
{
GPIO_SetBits(GPIOE,GPIO_Pin_4); //熄灭LED灯
delay_ms(500);//延时500ms
GPIO_ResetBits(GPIOE,GPIO_Pin_4);//点亮LED灯
delay_ms(500);//延时500ms
}

​可以按照芯片用户手册直接推算地址。或者如下面这样,写段测试代码。

从上图得知,SysTick->LOAD寄存器的地址是0XE000E014,写入寄存器的值是0X007270E0。

按照上述方案读取寄存器的值,步骤如下:

可以看到地址0XE000E014的SysTick->LOAD寄存器的值为0X7270E0。

04、后记

这里只是提供了一个简单的演示,可以非IDE仿真情况下,读取寄存器,协助排查MCU运行异常的原因,毕竟如果直接debug就能查到问题,熟悉32系列单片机的毕业生都可以做到。

我们需要在工作中积累这样类似的经验,巧妙使用工具处理一些“诡异”的问题,积累开发经验。

毕竟,填坑力就是核心竞争力。

点击查看本文所在的专辑,STM32F207教程

J-Link cmd的使用的更多相关文章

  1. cmd 概览---- 转

    打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd ...

  2. 一个文件夹可以link 到另外一个文件夹

    Creates a symbolic link. MKLINK [[/D] | [/H] | [/J]] Link Target /D      Creates a directory symboli ...

  3. DSP中CMD文件

    DSP中CMD文件 (2012-12-26 20:54:17) 转载▼ 标签: 杂谈 分类: DSP FPGA DSP的存储器的地址范围,CMD是主要是根据那个来编的.CMD 它是用来分配rom和ra ...

  4. CCS中cmd文件的编写

    http://blog.sina.com.cn/s/blog_abe5740601015b3q.html CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的 ...

  5. 实验一 命令解释程序cmd的编写

    #include<stdio.h>#include<stdlib.h>#include<string.h>#define N 30main(){ char str[ ...

  6. 【DSP开发】CMD文件

    DSP的存储器的地址范围,CMD是主要是根据那个来编的. CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间. 所以不同的芯片就有不同大小的rom和ram.放用户程序的地方 ...

  7. 牛客多校第四场 J Free 最短路

    题意: 求最短路,但是你有k次机会可以把路径中某条边的长度变为0. 题解: 跑k+1次迪杰斯特拉,设想有k+1组dis数组和优先队列,第k组就意味着删去k条边的情况,每次松弛操作,松弛的两点i,j和距 ...

  8. windows7命令帮助大全

    有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库 ...

  9. [转]Windows7文件夹转移清理臃肿的C盘

    当你使用Windows的时候,你会发现无论哪个版本的Windows,系统都会默认将用户文件夹和程序数据文件夹(xp下是Documents and Settings文件夹,而windows7和vista ...

  10. 玩转WIN7的MKLINK

    引言: 换了新电脑,终于再次使用上啦WIN7 ,经过一个周每天重装N次系统,终于弄好一个像样的系统啦.由于使用rt7lite对WIN7SP1官方整合包进行了适当精简,所以最终系统的稳定性还得经过一段时 ...

随机推荐

  1. linux学习之路第六天(文件目录类第二部分)

    文件目录类 1.cat指令 作用:查看文件内容,是以只读的方式打开. 基本语法 cat [选项] 要查看的文件 常用选项 -n; 使用细节: cat只能浏览文件,而不能修改文件,通常会和more一起使 ...

  2. kali中设置共享文件夹

    1.在虚拟机设置共享目录 2.查看共享目录命令 root@kali:~# vmware-hgfsclient 3.新建文件夹 root@kali:~# mkdir /mnt/hgfs/ShareDir ...

  3. 如何搭建一个简易的 Web Terminal(一)

    前言 在介绍本篇文章的时候,先说一下本篇文章的一些背景.笔者是基于公司的基础建设哆啦 A 梦(Doraemon)一些功能背景写的这篇文章,不了解.有兴趣的同学可以去 袋鼠云 的 github 下面了解 ...

  4. java集合(3)-Java8新增的Predicate操作集合

    Java8起为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将批量删除符合filter条件的所有元素.该方法需要一个Predicate(谓词)对象作 ...

  5. ArrayList 深入浅出

    ArrayList 特点:按添加顺序排列.可重复.非线程安全: 底层实现:数组 扩容原理:初始化集合时,默认容量为 0,第一次添加元素时扩容为 10,容量不够时扩容为原来容量的 1.5 倍. 这里扩容 ...

  6. jumpserver 用户,系统用户和管理用户 普通用户和特权用户 区别

    前言 现在很多公司都有在用Jumpserver跳板机 有很多人一直对jumpserver的各种用户还不是很了解 当你了解了这几个概念了之后,就能更好的灵活的运用到分配权限当中去. 下面我们一个一个的说 ...

  7. debain9显卡

    # Debian 9 "Stretch" deb http://httpredir.debian.org/debian/ stretch main contrib non-free ...

  8. python的web框架知识点

    一个完整的web应用:服务器收到来自浏览器的一个请求,服务器将请求内容的网页返回给浏览器,让浏览器显示出来.[而浏览器与服务器之前的传输协议是HTTP] HTTP是一个基于TCP/IP通信协议来传递数 ...

  9. 第十六篇 -- SuperIO学习

    一.SuperIO 这次主要研究SuperIO读取以及控制风扇转速的问题. 参考文章:https://huchanghui123.github.io/Linux/Linux-Superio-CPU-F ...

  10. js学习笔记之this指向及形参实参

    var length = 10 function fn () { console.log(this.length) } var obj = { length: 5, method (fn) { fn( ...