为什么要使用到J-LinkCommander呢???大部分情况下,我们使用J-link都是在IDE中debug使用的,出现问题,直接debug复现然后解决。这是最常见的开发方式。
南海网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
但是有些情况我们不能使用IDE直接debug,比如发布版本(JTAG或SWD接口可以正常使用),大批量生产时发现几片异常的板子,重新debug问题就消失了。
这个时候使用IDE直接debug已经不能解决问题,我们需要使用J-LinkCommander读取关键寄存器的值来协助我们定位排查问题。
Jlinkcmd它可以方便用户在非仿真的情况下,hold内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等,方便大家拥有最高的权限查看在运行中的MCU情况,查找非IDE仿真情况下,MCU运行异常的原因。
打开Jlinkcmd,如果单独安装了jlink驱动,我们可以在开始菜单找到Jlinkcmd。
或者在安装目录中找到它
如果你们有独立安装Jlink驱动,同样也可以在Keil的安装目录中找到它
首先使用Jlink连接好MCU,打开软件“Jlink.exe
按照提示输入相应信息connect->?->s->回车(旧版只需要输入usb即可连接目标芯片)
正确的链接目标芯片后:
如上图所示,选项字节里为"5AA5"即为无保护状态。
Jlinkcommand常用命令简介:
接下来就是实测环节,我们通过一个真实的例子演示一下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寄存器的值。对于上述代码SysTick->LOAD的寄存器地址,我们可以按照芯片用户手册直接推算地址。或者如下面这样,写段测试代码。
从上图得知,SysTick->LOAD寄存器的地址是0XE000E014,写入寄存器的值是0X007270E0。
按照上述方案读取寄存器的值,步骤如下:
可以看到地址0XE000E014的SysTick->LOAD寄存器的值为0X7270E0。
这里只是提供了一个简单的演示,可以非IDE仿真情况下,读取寄存器,协助排查MCU运行异常的原因,毕竟如果直接debug就能查到问题,熟悉32系列单片机的毕业生都可以做到。
我们需要在工作中积累这样类似的经验,巧妙使用工具处理一些“诡异”的问题,积累开发经验。
毕竟,填坑力就是核心竞争力。
本文转载自微信公众号「知晓编程」,可以通过以下二维码关注。转载本文请联系知晓编程公众号。
标题名称:一文学会J-Linkcmd的使用
文章起源:http://www.csdahua.cn/qtweb/news46/243896.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网