| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 高版本CubeIDE下使用DAP-LINK教程 -> 正文阅读 |
|
[嵌入式]高版本CubeIDE下使用DAP-LINK教程 |
高版本CubeIDE下使用DAP-LINK教程背景? 笔者此前在CSDN上写了两篇文章详述了如何在STM32CubeIDE下使用DAPLINK:
? 坏消息是,由于CubeIDE的不断更新,目前以上两种方式都已经被官方屏蔽,均无法正常使用DAPLINK在CubeIDE下调试。使用时CubeIDE界面会报错:“Could not verify ST device”,且Openocd界面报错:invalid command name “WriteDP”。 ? 在很长一段时间内,笔者并不知晓,因为目前多数时间都在使用JLINK,后面据网友反馈,官方已经将Openocd屏蔽。官方此举实在刺激了笔者,就想强推ST-LINK是吧,那么,针对ST官方的这种强势操作,我们还能怎么应对呢,且看下文: 单片机调试原理? 为了使读者理解程序调试的整个流程,不再被各种自以为是的IDE在调试上使绊子,设门槛,我们先来看看程序是如何调试的。 ? 目前常见的交互调试软件是GDB,其全名为:GNU Symbolic Debugger,通常它运行在用户PC上,提供了各种调试所需的接口,从而使用户可以直接获取处理器的控制权(下载启动、停止程序(打断点)、监测、修改寄存器和内存);而GDB软件提供的这些面向用户的统一接口,最终都要被调试器硬件(ST-LINK等)解释为目标处理器的调试模块的具体指令去执行,由此可见,处理器的调试模块要协同处理器本身及其外围各个外设的动作,该模块的设计过程在单片机中比处理器本身还要繁琐。但对于用户来说,调试时,只需要关心调试器是否能正常和目标处理器连接,并向上为用户提供GDB服务即可。GDB命令需要由命令行执行,即使它已经很强大了,但对用户来说,它还不够友好,因此通常IDE调用GDB软件时,提供了图形化界面给用户,使得用户不需要自己输入命令从而执行调试。 ? 通过以上介绍,想必读者对调试工作流程还未全部理解,我们在此展示一个简图: ? 通过上图我们可以宏观的了解PC端对MCU的调试所经过的链路,因此OpenOcd在调试过程中,其实是充当了类似于调试器驱动的角色,用以将用户的GDB命令最终转换为具体调试接口协议的电信号。GDBServer一般提供调试服务器供用户使用,其通讯一般使用TCP/IP协议,因此,这也就是为什么在OpenOcd和硬件完成连接后,会提供3333端口的原因。该端口就是为用户提供,用于访问MCU硬件的。大多数情况下,我们一般都是在本机调试,因此,连接的都是本地主机,可以通过Localhost或127.0.0.1访问。 ? 有了以上了解,我们就大概可以知道,CubeIDE目前的高版本中,为用户提供调试器应该是动了手脚的,导致我们无法正确的连接到目标MCU。于是,想要在CubeIDE下使用DAP-LINK,只需要三步:
? 看起来很简单,实际上,也确实很简单,后续我将参考前两篇文章的方法,分别使用独立脚本的方式以及CubeIDE中的External Tools方式演示使用GDB进行调试。 准备工作1. Openocd? 看过笔者前两篇文章的读者应该知道,Openocd的使用需要一个interface配置文件以及一个target配置文件以确定调试器硬件和目标mcu型号。Openocd在CubeIDE的环境下已经自带,并且对应的配置文件也有提供。读者可以根据需要到自己目录下寻找。 ? 虽然,CubeIDE自带了,但是为了防止ST再搞事情,笔者此处不使用CubeIDE自带的Openocd,而选择自己下载,此处给出下载链接:OpenOcd 。 ? 下载后,为方便使用,需要将openocd.exe加入环境变量path中:
2. arm-none-eabi-gdb? arm-none-eabi-gdb.exe是GCC For ARM编译器工具链中的其中一个组件,专门用于arm处理器的调试。该文件CubeIDE同样自带了,笔者这里同样使用自己下载的GCC For ARM编译器工具链,同样附上下载链接:arm-none-eabi-gcc。 ? 此处读者也可以使用CubeIDE自带的,毕竟,ST应该不会在编译器工具链上搞事情。 ? 同样,为了方便使用,需要将arm-none-eabi-gdb.exe所在路径加入环境变量path中,过程笔者不再过多赘述。 3. 测试工具链? 为了使后续过程顺利,读者应保证自己的openocd.exe及arm-none-eabi-gdb.exe在任意路径下都能执行,笔者在此给出测试截图: ? Openocd测试: ? arm-none-eabi-gdb测试: ? Openocd及arm-none-eabi-gdb两个命令均能正常响应,则证明前面加入环境变量path成功,如读者尝试失败,请检查自己第一步与第二步是否操作到位。 独立脚本使用Openocd? 在**“在Stm32CubeIDE环境下使用DAP-Link仿真”**一文中,笔者介绍了如何使用脚本执行openocd。当时笔者并未进行命令路径全局变量path的操作,故该脚本只能在openocd目录执行,此处,因为openocd命令已经加入环境变量,因此可以放在任意目录执行。 ? 笔者在本文中的开发板是STM32F405,故脚本内容为:
? 将脚本加以修饰后:
? 将以上内容粘贴保存为txt文件,修改后缀名为.bat,即可运行 ? 运行结果如下,可以看到,Openocd执行后,成功开启了3333的端口,等待用户访问:
? 在此给出STM32其他型号的命令供读者参考:
? 连接目标板成功后,我们需要在CubeIDE工程下新建调试配置以使用GDB服务,记得选择图中的GDB硬件调试配置去新建,选好工程和工程对应的elf文件: ? 在调试配置的Debugger中选择GDB软件(arm-none-eabi-gdb.exe),以及Openocd开启的调试服务端口:Localhost:3333,或者127.0.0.1:3333。 为了方便调试记得在main函数处设置个断点: ? ? 点击Debug调试,就可以如常进行运行和调试了: ? 通过External Tools调用Openocd? 先在CubeIDE的External Tool中添加Openocd,依次进入CubeIDE菜单栏->RUN->External Tools-> External Tools Configrations->Program(右键)->NEW Configration,并根据自己喜好重命名: ? 在Debugger Configration中新建Launch Group并添加命令步骤:先执行Openocd,开启GDB服务,在使用arm-none-eabi-gdb执行调试: ? 此时就可以选择咱们自定义的Launch Group进行调试了。 本文参考资料:
*本文是作者闲时业余记录,如由遗漏错误,请见谅,感谢观看文章,转载不用注明出处。* |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:36:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |