利用树莓派打造STM32无线在线调试器!

发布者:心若水仙最新更新时间:2020-03-25 来源: eefocus关键字:树莓派  STM32  无线在线调试器 手机看文章 扫描二维码
随时随地手机看文章

不知各位嵌入式开发者有没有遇到这样的经历:J-link的线长限制了我们编程的姿势,很多时候我们的工程都需要板子产生一些位移(比如调小车之类的),这时候J-link的线会让我们Debug的过程变得非常痛苦。。。那么有没有办法让我们解决这个数据线的痛苦呢??答案是当然有的!只要有着一颗折腾的心,办法总是会慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢想出来的。本人最近一直在弄一个相关工程,因为被线限制的非常痛苦,于是就考虑出了使用树莓派作为J-link的服务器然后和STM32固连来实现远程下载与调试的办法。鉴于官方仅放出驱动程序没有提供技术支持,本人在折腾的时候发现网上的资料也很少,特在此记录我的操作步骤和方法,以便大家也能和我一起分享无线的喜悦


#利用树莓派作为J-link的远程服务器

首先,我们需要在树莓派上安装J-link的驱动,截至本文章撰稿完成,目前的J-link驱动版本是V6.22c。我们可以下载ARM版本的J-link驱动(该资源是我手工下载下来的再重新上传的,方便大家找和下载)


如果这篇文章已经过去了很久 那么建议从下面的官网地址去下载

https://www.segger.com/downloads/J-link/


我们会下载得到一个tgz压缩包 把这个包解压到树莓派中(建议目录/opt/)

打开这个文件夹,里面会有很多的可执行文件。这时候我们需要运行其中的J-linkRemoteServer

首先确认我们具有可执行权限,如果没有则需要使用chmod指令


chmod +x J-linkRemoteServer


这时候,记得把J-link插上树莓派,然后我们可以试着运行一下


./J-linkRemoteServer


当你的终端显示"Waiting for client connection…"的时候就意味着你的服务器已经启动成功了!


如果出现其他问题,建议使用J-linkExe来看一下J-link的识别问题

启动情况

如果测试成功的话,我们就可以把它添加到树莓派的开机自启动了,让树莓派在开机自启的时候打开服务,更省心。


我们可以用sudo vim /etc/rc.local,在文件末尾前添加自己的启动项。


nohup /绝对路径/J-linkRemoteServer &


使用nohup的原因是有时候Server会等待输出,使用nohup好像可以忽略输出。。在这点我还是有一点不明白,欢迎评论指教。


使用 & 的原因是开机的时候把该程序挂到后台

编辑完成后保存重启,重启后可以使用ps -A来查看服务有没有正常运行


当树莓派的远程服务器已经配置完成的时候,我们就可以把树莓派与STM32通过J-link给连接好,固定好,然后让树莓派连上wifi 静静的待在一个地方就可以了。

#上位机连接J-link远程服务器


在这里我使用的是MDK-ARM ,想必大家开发应该也是用这个居多吧 如果用的是IAR或者其他的IDE,应该是大同小异的


这时候我们随便打开一个工程,在工程设置里面找到J-link的设置

设置1

然后把链接方式改成“TCP/IP”,然后在ip地址填上树莓派的局域网ip地址,端口填0让程序自动搜索就可以的了

设置2

链接成功的话再设置上方应该会出现J-link的驱动号还有设备号

设置3

然后到此 设置就完成了!然后就可以像平时一样,该怎么下载就怎么下载 该怎么调试就怎么调试,再也没有线的限制!


PS:在使用中可能遇到的问题


在下载的过程中经常出现Max Number错误:局域网的传输速度太慢,同时下载速率过高,导致传输时频繁重连导致出现链接数量超过限制的错误。解决办法:把传输速率降低,比如我就把传输速率降到了500kHz。大家可以自己大概试着调一下。


以下是建议步骤 我在探索的时候有这些操作 但不确定这些操作是不是必须的 如果跟着上面的操作有任何异常情况 可以试着走一走下面的步骤


###更新电脑端的J-link驱动程序

因为刚刚我们在ARM的服务端是刚刚在官网下的比较新的驱动,鉴于很多人在平时开发STM32工程没有什么升级J-link的习惯,所以J-link软件一般都比较老,这可能会导致一些版本不兼容的情况,所以电脑的J-link驱动也需要更新,可以查看刚刚提供的官网链接。

在安装完新版的J-link之后记得还要在IDE里面更新J-link的文件,用驱动自带的DLL-updater或者手动复制都可以了。

关键字:树莓派  STM32  无线在线调试器 引用地址:利用树莓派打造STM32无线在线调试器!

上一篇:ADB+Python+STM32 实现 微信跳一跳辅助
下一篇:stm32 usb和安卓手机的通讯过程

推荐阅读最新更新时间:2024-11-12 03:26

STM32 PWM问题
本文不提供完整程序,仅点出要点 1:时钟配置。因为PWM输出属于复用功能,所以时钟使能必须使能RCC_APB2Periph_AFIO ; 2:IO口使能。因为PWM属于复用功能,所以IO输出设置要配置成GPIO_Mode_AF_PP;而不能配置成普通输出IO的GPIO_Mode_OUT_PP模式; 3:PWM初始化代码如下,本程序只用通道3输出,所以pwm输出只配置了通道3,TIM_OC3Init(TIM3, &TIM_OCInitStructure);需要多通道输出PWM则需要配置多个PWM输出通道,通过改变TIM_Pulse 的值可以改变pwm的占空比(可以通过直接操作寄存器TIM3- CCR3=2400来实现)。 /* Ti
[单片机]
STM32学习——EXTI外部中断
EXTI简介 EXTI可以实现对外部输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 可以看到EXTI一共有20条信号线,即可同时检测来自20路的中断请求。 代码实现 (1)首先配置GPIO初始化结构体 GPIO要配置为浮空输入 void Key_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStruc
[单片机]
<font color='red'>STM32</font>学习——EXTI外部中断
STM32之SPI驱动液晶屏的一个问题
这两天在调试STM32通过SPI接口驱动液晶屏,遇到一个很奇怪的问题。我在开发板上驱动液晶屏,屏正常点亮,功能操作正常。但我将驱动程序移植到我们产品上时,屏死活点不亮。我用示波器测量SCK、SDA、CS及A0信号,每个引脚的输出都是正常的。对比SCK、SDA数据,发现也没有问题。几经排除,最终发现是SCK与CS信号时序上不对齐所导致。 正确的CS与CLK的时序如下 所有CLK信号落在CS区间里面。 有问题的CS与CLK的时序 最后一个CLK落在CS区间外面,导致整体的SPI数据错误,LCD屏无法识别SPI信号。 程序代码如下 static bool SSP2_writeByte(byte data) { /
[单片机]
<font color='red'>STM32</font>之SPI驱动液晶屏的一个问题
关于STM32单片机的介绍
意法半导体STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核的32位MCU。意法半导体的STM32基本型系列、增强型系列、USB基本型系列、互补型系列;沿用增强型系列的72兆赫兹处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。 下面主要介绍关于STM32常见问题。 1、AHB系统总线分为APB1(36MHz)
[单片机]
关于<font color='red'>STM32</font>单片机的介绍
9、STM32的PWM的原理与使用(内附代码)
1、PWM是什么? 是脉冲宽度调制,简称脉宽调制。利用微处理器数字输出对模拟电路进行控制的一种有效的技术,就是对脉冲宽度的控制。 这里说的脉冲,就是我们产生的方波。方波就是N个这样的周期连续的产生。 一个周期内高电平持续的时间就是脉冲宽度(脉宽),而PWM(脉冲宽度调制)就是控制一个周期内的高电平的持续时间。 2、简单的PWM的原理示意图 CNT:是当前值寄存器,计数寄存器。 ARR:是自动重载寄存器(初始化设定)。 CCRx:比较值寄存器(TIM_SetCompare1()设定修改占空比)。 假定定时器工作在向上计数PWM模式下: 当CNT CCRx时,引脚输出0,当CNT =CCRx时,引脚
[单片机]
9、<font color='red'>STM32</font>的PWM的原理与使用(内附代码)
STM32学习——内存管理实验
SD卡的内容啃了好久,终于要搞定了,在这之前先学习内存管理的知识。 内存管理,是指软件运行时对内存资源的分配和使用,本次介绍的是分块式内存管理。 内存管理分为内存池和内存管理表,内存池是由n个大小相等的内存块组成,对应的内存管理表表示该内存块是否被占用(0:未被占用;非0:已被占用),且它的数值为连续被占用的内存块数;假如为5,表示包括该内存块在内,共有5个连续的内存块被占用。 它的分配方向是由顶层向底层分配,即先分配第n个内存块,接着第n-1个。 在申请下一个内存时,一定要释放前一次的内存,否则会丢失内存资源。 将src指向的n个字节复制到des指向的地址中; 往s指向的地址中写入count个的c; 内存表与内
[单片机]
整合各方大佬多得来的经验如何学习STM32!(入门、进阶)
一、想快速入门进阶,面向工作时   先把工作中需要的东西学会,一项一项的来,比如先把GPIO弄清楚,怎么初始化,怎么输入输出,然后定时器、串口、ADC、DAC、DMA、SPI等等先把用得着的一个一个地做,   都弄明白了再往一块整合,从简单到复杂,硬件操控起来了也就算对这种单片机入门了吧,软件方面,不管用什么单片机,用什么编译器,区别不大初学的最好还是买个开发板,不   需要多高级的,有几个常用功能做出来,其它就容易了。--------hdxet   关于初学者是否需要弄清底层函数问题:   先玩起来再说底层函数,一般就用现成的库,绝大多数应用都没问题的,至于库里面是什么,先不管它,到了高级阶段再去看--------hdxet  
[单片机]
STM32 GPIO模式理解
stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入; 2. 浮空输入; 3. 上拉输入; 4. 下拉输入; 5. 开漏输出; 6. 推挽输出; 7. 复用开漏输出; 8. 复用推挽输出 如图是GPIO的结构原理图: 1.模拟输入 从上图我们可以看到,我觉得模拟输入最重要的一点就是,他不经过输入数据寄存器,所以我们无法通过读取输入数据寄存器来获取模拟输入的值,我觉得这一点也是很好理解的,因为输入数据寄存器中存放的不是0就是1,而模拟输入信号不符合这一要求,所以自然不能放进输入数据寄存器。该输入模式,使我们可以获得外部的模拟信号。 2.浮空输入 该输入状态,我的理解是,它的输入完全由外部决定
[单片机]
<font color='red'>STM32</font> GPIO模式理解
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved