基于ESP8266的CMSIS-DAP调试器

2023-11-18

前言

 前段时间用8266制作了一个STM32的下载器,可以进行远程下载固件。不过我们用STM32的时候,经常需要进行各种调试,这时候一个调试器就很重要了。于是我想到也许可以做一个无线调试器?本来我打算自己写一个的,不过在github发现居然有人做过了,那就直接拿来用吧哈哈哈。项目地址: esp8266-wifi-cmsis-dap
 虽说有现成的代码,作者也写了在Linux下的详细使用说明,可是我还是折腾了好几天才搞好(可能是我太菜了肯定是我太菜了)。在这里做个记录,希望可以帮到有同样想法的人。
开始之前先说一下,本文是在Windows下进行测试的,感觉是信号的问题,有时Keil会显示RDDI-DAP Error。

前期准备

  • ESP8266
    这个直接在淘宝买就好了,一般都是十几块钱的那种
  • ESP8266开发环境
    由于项目是用Arduino来写的,所以推荐使用Arduino IDE或者VS Code + PlatformIO。Arduino IDE用来开发ESP8266的人好像挺多的,而且很多人也比较熟悉,不过我更加推荐在VS Code上安装PlatformIO来进行开发,真的超级方便的!!
  • esp8266-wifi-cmsis-dap
    clone下来或者直接下载zip下来都可以啦
  • Keil,STM32单片机,杜邦线
    估计看这篇文章的人肯定都有吧哈哈哈
  • USB/IP软件及驱动
    usbip.zip
    driver.7z
    原版的usbip和驱动我用了会出现蓝屏(BSOD),最后找到了这样一个帖子(果然我不是一个人),里面提供的软件和驱动我用了没有问题。由于帖子里面把文件上传到了dropbox,也许你会无法访问,可以通过我上传的链接进行下载。

制作固件

首先用下载好多esp8266-wifi-cmsis-dap构建工程,然后在main.cpp里面(62行),修改你的WiFi名称和密码:

const char* ssid = "<your SSID>";//你的WiFi SSID
const char* pass = "<your password>";//你的WiFi密码

当然你也可以用smartconfig
为了方便后面连接,我们可以在WiFi连接成功后把IP地址通过串口打印出来,在setup()里面添加上(846行):

Serial.println(WiFi.localIP());

这时候就可以编译下载到你的8266上了。
关于ESP8266的编译和下载已经有很多文章讲到了,所以我在这里就不说啦。如果你觉得太麻烦了的话,可以在文末下载我编译好的固件

ESP8266连接STM32

经过测试,发现用JTAG连接的方式会稳定很多,以下是接线方式

D0     STM32RESET
D1     TDI
D2     TDO
D3     TCK
D4     TMS
GND  GND
3.3V  3.3V

也许你的单片机上面已经把这些引脚标出来了,这样的话直接对应连接就好了。如果没有的话,请参考下面的图:

这里用的是SWDJTAG的连接方式,如果你想要用其它的连接方式,请查看DAP_config.h文件的第127行(好像换了连接方式稳定很多)。

安装虚拟USB驱动

因为这个驱动没有签名,所以我们需要把Windows的测试模式打开。以管理员身份打开命令行工具,输入以下命令:

bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING ON

在这里插入图片描述
完成上面操作后,重启电脑,可以看到右下角有这样的提示:

如果你需要关闭测试模式,可以输入:

bcdedit -set TESTSIGNING OFF

解压driver.7z备用,打开设备管理器,点击任意一个设备,然后点击操作-添加过时硬件:
在这里插入图片描述
点击下一步,选择“安装我手动从列表选择的硬件(高级)”:

下一步-下一步,选择从磁盘安装:

在弹出的窗口选择浏览,最后定位到你解压的driver文件夹下面的output,选择USBIPEnum.inf,打开-确定-下一步-下一步,最后就完成了。

连接ESP8266

解压usbip.zip,在usbip目录下打开终端,可以输入usbip.exe -h查看命令:
在这里插入图片描述
输入usbip.exe -D -a 192.168.123.139 1-1来连接ESP8266,这里的IP地址192.168.123.139换成你的实际IP地址(可以通过串口来查看),其它地方不用变。
在这里插入图片描述这样子就表示连接成功了。
要保持连接的话,一定不能关掉窗口!!!
如果你不想每次都进入文件夹再输命令,可以把usbip目录加到系统环境变量里面去

开始调试

首先由Keil打开我们的工程,修改调试器为CMSIS-DAP
在这里插入图片描述

打开Settings看看是不是连接成功了

修改几个红色框框里面的选项,应该就能在右侧的绿色框框看到连接的调试器了。至于Max Clock,你可以自己看着改,一般都可以。
最后别忘了把这个选上
在这里插入图片描述
接着来试一下编译下载吧
在这里插入图片描述
没毛病,那就接着试一下调试
在这里插入图片描述
在这里插入图片描述
很明显,这样就成功了。
如果你想要用openocd来调试的话,也是可以的哦。
在这里插入图片描述
(好像速度比keil慢多了,我也不知道为什么)

下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于ESP8266的CMSIS-DAP调试器 的相关文章

  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • ESP8266 烧录 (关于BearPi扩展Wifi模块的烧录方式)

    简介 ESP 12F 模块是BearPI IOT购买的一个套餐所带的扩展模块 用来接通网络 但是默认电路不支持重新烧录 下面就是可支持重新烧录的方式 ESP 12F 电路原理图 如上图 GPIO15 gt GND gt 高电平 GPIO2
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 如何在不连续重置的情况下将esp8266从深度睡眠中唤醒

    我正在使用 esp8266 构建 IR 到 wifi 桥接器 基本上 我正在构建一个连接到红外遥控器内的 esp8266 的红外接收器 以通过 wifi 将接收到的红外远程按键转发到服务器 我使用的是 Wemos D1 Mini 我已经让
  • Sntp.sync() 忽略服务器

    我一直在尝试与 ntp 服务器同步时间 但是 nodemcu 似乎忽略了服务器参数 sync lua sntp sync fr pool ntp org function tm rtctime epoch2cal rtctime get p
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 使用 SPIFFS 加载文件时出现问题 (ERR_CONTENT_LENGTH_MISMATCH)

    好吧 这两天我一直在研究这个问题 但我仍然觉得我一无所获 我最近开始使用SPIFFS 文件系统 for Arduino开发于呼扎 ESP8266像FSBrowser ino例如 虽然它在分离代码方面非常出色 但随着我的代码不断增长 它在稳定
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐

  • uniapp 调用蓝牙接收数据、发送指令后接收返回结果

    uniapp 调用蓝牙接收数据 向设备发送指令后接收返回结果 一 连接蓝牙设备 1 初始化蓝牙 2 搜索蓝牙 3 获取设备列表 4 连接设备 二 接收数据 1 获取设备服务列表 2 获取蓝牙特征 3 接收设备数据 三 向设备发送数据 并接收
  • 微服务及其框架是什么

    要理解微服务 首先要先理解不是微服务的那些 通常跟微服务相对的是单体应用 即将所有功能都打包成在一个独立单元的应用程序 从单体应用到微服务并不是一蹴而就的 这是一个逐渐演变的过程 本文将以一个网上超市应用为例来说明这一过程 目录 1 单体
  • js中的日期Date操作——获取当前日期 yyyy-mm-dd格式

    getCurrentDate const date new Date const year date getFullYear toString const month 0 date getMonth 1 slice 2 const day
  • AD操作小技巧总结

    1 群操作修改元器件属性 使用寻找相同的元器件来统一修改值 最重要一步是找到后用shift选中你需要的那几个 修改完后按enter键即可 根据下图可以知道筛选的条件有很多 也可以从不同的文件中去寻找元器件 2 将PCB中元器件旋转任意角度
  • 逐渐从土里长出来的小花

    从土里逐渐长出来的小花 这是长出来后的样子 图片压缩了出现了重影 代码在这里
  • Tornado中文教程

    Tornado 是一个Python web框架和异步网络库 起初由 FriendFeed 开发 通过使用非阻塞网络I O Tornado可以支撑上万级的连接 处理 长连接 WebSockets 和其他需要与每个用户保持长久连接的应用 相关链
  • 记录使用flask+socket+mongodb页面P标签的刷新

    1 flask的学习 随便百度个flask入门教程熟悉一下flask的启动 路由等 2 mondodb的学习 同1 3 socket的学习 同1 4 碰到的问题 4 1socket阻塞 使用 from threading import Th
  • 【全文检索_10】Filebeat 基本使用

    1 1 简介 1 1 1 概述 Filebeat 是 Beats 的一员 用于转发和集中日志数据的轻量级传送工具 当面对成百上千 甚至成千上万的服务器 虚拟机和容器生成的日志时 Filebeat 将为您提供一种轻量型方法 监视指定的日志文件
  • 网络数据传输的封装

    数据封装 Data Encapsulation 是指将协议数据单元 PDU 封装在一组协议头和尾中的过程 在OSI七层参考模型中 每层主要负责与其它机器上的对等层进行通信 该过程是在协议数据单元 PDU 中实现的 其中每层的PDU一般由本层
  • QString编码转换

    QString是QT中对于字符串的存储和处理的类 类似于MFC中的CString 如果用过的话就知道比std中的string和wstring要好用的多 功能也更强大 QString内部是将字符串保存为Unicode编码的 所以无论传入的字符
  • 【pytest】 标记冒烟用例 @pytest.mark.smoke

    1 使用 pytest mark smoke 标记用例 import pytest class Test Smoke def test 01 self assert 1 1 2 pytest mark smoke def test 02 s
  • OpenOCD介绍以及上手

    Versaloon支持AVR和AVR32的方式是模仿JTAGICE mkII 所以使用上相对简单很多 只是使用官方的开发环境即可 但Versaloon对ARM的支持是通过OpenOCD来实现 OpenOCD目前在国内还是非常少使用的 可能中
  • js文件下载 (url下载,监听进度)视频下载、图片下载、apk下载

    此下载功能针对文件是url 例如http xxxx 图片 jpg http xxx 视频 mp4 http xxx 应用 apk等等 可以监听进度 失败等等 function downFile url name var xhr new XM
  • iOS编程基础-OC(七)-运行时系统

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 第7章 运行时系统 终于到了运行时这一章 让我们来一步一步揭开它神秘的面纱吧 OC拥有相当多的动态特性 这些特性在运行程序时发挥作用 而不是在编译或链接代码时发挥作用
  • 解决报错:Errorjava.lang.NullPointerException(no error message)

    解决报错 Error java lang NullPointerException no error message 一 分析原因 Android Studio经常出现dependencies或者configuing相关错误 这类错误出现的
  • python中!=是什么_python中!=的意思是什么

    python中 的意思是什么 发布时间 2020 07 14 15 09 19 来源 亿速云 阅读 208 作者 Leah python中 的意思是什么 很多新手对此不是很清楚 为了帮助大家解决这个难题 下面小编将为大家详细讲解 有这方面需
  • OD2022Q2算法题-补种未成活胡杨,输出最多的连续胡杨树数-PYTHON解法

    题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植N棵胡杨 编号1 N 排成一排 一个月后 有M棵胡杨未能成活 现可补种胡杨K棵 请问如何补种 只能补种 不能新种 可以得到最多的连续胡杨树 输入描述 N 总种植数量 1 lt N l
  • ImportError: cannot import name ‘dtensor‘ from ‘tensorflow.compat.v2.experimental‘报错

    一 错误分析 出现这个问题原因在于tensorflow和keras版本不匹配 keras的版本太高了 需要降低到和tensorflow版本一致 二 解决步骤 1 首先查看自己电脑的keras版本 pip show keras 上图中 我的t
  • 图书推荐管理系统Python,基于Django和协同过滤算法等实现

    一 介绍 图书推荐系统 图书管理系统 以Python作为开发语言 基于Django实现 使用协同过滤算法实现对登录用户的图书推荐 二 效果展示 三 演示视频 视频 代码 https www yuque com ziwu yygu3z gq5
  • 基于ESP8266的CMSIS-DAP调试器

    前言 前段时间用8266制作了一个STM32的下载器 可以进行远程下载固件 不过我们用STM32的时候 经常需要进行各种调试 这时候一个调试器就很重要了 于是我想到也许可以做一个无线调试器 本来我打算自己写一个的 不过在github发现居然