我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文学会J-Link cmd的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文学会J-Link cmd的使用

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

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

02Jlinkcmd使用

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延时函数的四种方法》中有以下代码

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

调用示例

  1. while (1) 
  2.  { 
  3.    GPIO_SetBits(GPIOE,GPIO_Pin_4);  //熄灭LED灯                      
  4.    delay_ms(500);//延时500ms 
  5.    GPIO_ResetBits(GPIOE,GPIO_Pin_4);//点亮LED灯                      
  6.    delay_ms(500);//延时500ms 
  7.  } 

我们就用来验证SysTick->LOAD寄存器的值。对于上述代码SysTick->LOAD的寄存器地址,我们可以按照芯片用户手册直接推算地址。或者如下面这样,写段测试代码。

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

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

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

04后记

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

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

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

本文转载自微信公众号「知晓编程」,可以通过以下二维码关注。转载本文请联系知晓编程公众号。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文学会J-Link cmd的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文学会J-Link cmd的使用

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

一文教你学会使用Nginx

Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。

一文教你学会Go中singleflight的使用

Singleflight是一个Go包,可防止并发请求重复执行相同的耗时操作。它通过缓存结果来实现串行执行和性能提升。使用方法:创建Singleflight对象并指定执行的DoFunc执行DoFunc来获取结果获取结果和错误优势:避免重复操作,提高性能简化并发控制缓存结果用例:数据库查询、远程资源加载、复杂计算等。Singleflight还提供了配置选项,如缓存大小、过期时间和缓存未命中时的等待时间。
一文教你学会Go中singleflight的使用
2024-04-02

一文学会使用Remix写API接口

这篇文章主要为大家介绍了一文学会Remix写API接口实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-15

一文带你学会使用PHP接口

PHP中的Interface是一种非常重要的特性,它允许开发人员定义一组规范或者约束,以确保类之间的互操作性和兼容性。在本文中,我们将详细介绍PHP中的Interface的概念、定义、实现、使用、使用场景以及其它相关的一些知识点,需要的朋友可以参考下
2023-05-18

一篇学会 Java NIO Channel 的使用

要从 channel 中读取数据(也就是上面这个例子),需要先将数据读到 ByteBuffer 中;同理,要想向 channel 中写入数据,也需要先将数据写入 ByteBuffer(下面讲输出流的时候会讲)。

一文学会使用 CSS 中的 min(), max(), clamp() 以及它们的使用场景

2020年4月8日,Firefox浏览器支持了 CSS 比较函数(min(),max(),clamp()),这意味着现在所有主流浏览器都支持它们。这些CSS函数最大的作用就是可以为我们提供动态布局和更灵活设计组件方法。

一文带你快速学会C#中WinForm框架的使用详解

WinForm是一门非常经济实惠的技术,就是说,可以在短时间内学会,并迅速借此进行项目开发。本文就来和大家聊聊WinForm框架的使用方法,希望对大家有所帮助
2023-02-26

一文带你学会规则引擎Drools的应用

Drools 就是一个开源的业务规则引擎,可以很容易地与 spring boot 应用程序集成,这篇文章就来和大家详细聊聊Drools的具体应用,需要的可以参考一下
2023-03-11

一文学会Python面向对象中封装、继承、多态使用

本文将通过实际的代码示例和详细的解释,深入了解封装、继承和多态这三个概念,并掌握如何在Python中运用它们。

一分钟带你快速学会Selenium工具的使用

学会Selenium工具的使用可以帮助我们自动化网页测试,提高测试效率。下面是快速学习Selenium工具使用的步骤:1.下载Selenium WebDriver:首先,从Selenium官方网站下载Selenium WebDriver。根
2023-09-20

一篇文章学会Python PyQt6表格视图和表单布局的使用方法

本文介绍了PyQt6中常用的两种布局方式,即表格视图和表单布局,并介绍了如何使用PyQt6中的事件处理机制处理鼠标和键盘事件。希望这篇文章能够帮助你更好地理解PyQt6的布局和事件处理机制,并能够编写出更加灵活和强大的PyQt6程序。

瞅一眼就能学会的GO并发编程使用教程

随着互联网的普及,互联网用户人数原来越多,这对系统的性能带来了巨大的挑战。这个时候就需要并发编程了,本文为大家整理了详细的GO并发编程使用教程,让你看完就能学会
2023-02-24

一文学会使用Linux内核模块&proc实例统计所有进程信息

这篇文章主要介绍了使用Linux内核模块&proc实例统计所有进程信息详解,
2023-05-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录