esp32-s3 vscode+espidf 实现单步调试

概述

esp32有些情况下只是看打印信息无法快速定位问题,于是需要调试仿真,本文章使用esp32s3通过vscode实现单步调试,因为esp32-s3系列可以直接通过芯片的usb接口直接进行调试,可以不需要外部的调试器。

环境搭建

  1. 首先使用vscode创建一个esp32 idf工程,本文使用esp32例程。
    在这里插入图片描述
  2. 修改.vscode/launch.json内容文件,文件内容参考esp32官方文档,笔者写这篇文章的时候,ESP-IDF编程指南中给出的github主分支已经失效(https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/DEBUGGING.md),于是参考其他分支文档(https://github.com/espressif/vscode-esp-idf-extension/blob/unit-tests-test-coverage/docs/DEBUGGING.md)
  3. 快速定位到上述文档中的 Use Microsoft C/C++ extension to debug,并将内容复制到.vscode/launch.json 中,并删除原有内容
    在这里插入图片描述
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "GDB",
      "type": "cppdbg",
      "request": "launch",
      "MIMode": "gdb",
      "miDebuggerPath": "${command:espIdf.getXtensaGdb}",
      "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
      "windows": {
        "program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf"
      },
      "cwd": "${workspaceFolder}",
      "environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],
      "setupCommands": [
        { "text": "target remote :3333" },
        { "text": "set remote hardware-watchpoint-limit 2"},
        { "text": "mon reset halt" },
        { "text": "thb app_main" },
        { "text": "flushregs" }
      ],
      "externalConsole": false,
      "logging": {
        "engineLogging": true
      }
    }
  ]
}

在这里插入图片描述
4. 芯片选择esp32s3,并设置idf.openOcdConfigs
选择esp32s3在这里插入图片描述
设置idf.openOcdConfigs
在这里插入图片描述
idf.openOcdConfigs 也可以手动修改,打开.vscode/settings.json,定位到 “idf.openOcdConfigs”,将其内容修改为 “board/esp32s3-builtin.cfg”

"board/esp32s3-builtin.cfg",

在这里插入图片描述
5. 编译工程代码并通过串口下载程序,将esp32串口接入电脑,编译、下载程序并打开监控器
在这里插入图片描述
6. 程序下载完后,将esp32 USB接入电脑,并选择对应的COM口,并启动GBD调试,如果出现以下弹窗,需要修改.vscode/launch.json内容
在这里插入图片描述
修改点如下

"miDebuggerPath": "${command:espIdf.getToolchainGdb}",

在这里插入图片描述
7. 修改.vscode/launch.json文件后再次仿真出现这个弹框,OpenOCD Server 没有开启导致
在这里插入图片描述
8. 打开 OpenOCD Server 并再次仿真,可以看到程序停留在断点处
在这里插入图片描述

注意事项

  1. 在仿真过程中,如果代码有改动需要编译下载后再进行仿真
  2. 如果jtag下载不稳定,可以使用串口下载程序,然后再使用usb jtag进行仿真调试
  3. 使用usb jtag仿真调试没有串口打印那么流畅
<think>嗯,用户想通过VSCode烧录调试ESP32-S3,只使用RXTX口。首先,我需要确定RXTX口指的是UART的TX和RX引脚,对吧?那用户可能没有多余的引脚或者不想用其他接口,比如JTAG。 接下来,用户问应该选择UART还是JTAG烧录方式。UART和JTAG的区别是什么?UART通常用于串口通信,烧录程序的话可能需要进入下载模式,比如拉低某个GPIO引脚。而JTAG是更专业的调试接口,支持实时调试,但可能需要更多的连接线,比如TDI、TDO、TCK、TMS,可能还需要额外的硬件适配器。 用户的情况是只用RXTX口,也就是UART,所以可能只能用UART烧录。不过ESP32-S3是否支持通过UART烧录?根据之前的知识,ESP系列通常支持UART下载,但需要进入bootloader模式,可能需要手动复位或者拉低某些引脚。 另外,用户提到要通过VSCode,可能需要用PlatformIO或者ESP-IDF插件。这两种工具都支持UART烧录吗?PlatformIO配置的时候需要指定上传方式为UART,正确设置端口和波特率。而ESP-IDF也有相关的配置选项。 不过调试的话,UART只能做日志输出,不能进行单步调试之类的操作。如果用户需要高级调试功能,可能需要JTAG,但用户现在只能用RXTX,也就是UART,所以可能只能进行基本的烧录和日志调试。 然后,用户可能遇到的问题包括无法自动进入下载模式,需要手动操作,或者驱动问题,比如CH340、CP210x驱动是否正确安装。还有硬件连接是否正确,TX接RX,RX接TX,是否有供电问题。 需要提醒用户注意接线是否正确,是否需要额外的电阻,比如是否需要拉高或拉低某些引脚来进入下载模式。例如,ESP32-S3可能需要GPIO0拉低,EN引脚复位来进入下载模式。 总结下来,用户的情况适合使用UART烧录,但需要手动进入bootloader,可能无法进行高级调试。如果需要调试,建议使用JTAG,但这需要额外的接口和硬件。所以回答时应分情况说明,UART可行但有限制,JTAG更强大但需要更多资源。</think>通过VSCodeESP32-S3进行烧录和调试仅使用UART(RXTX)接口是可行的,但需根据需求选择不同的工作模式。以下是技术方案对比和操作指南: --- ### **一、烧录方式选择对比** | 特性 | UART模式 | JTAG模式 | |--------------------|----------------------------------|----------------------------------| | **硬件需求** | 仅需TX/RX/GND三线 | 需额外连接TMS/TCK/TDI/TDO四线 + 调试器(如ESP-Prog)| | **调试功能** | 仅支持日志输出 | 支持断点调试、内存监控、寄存器级调试 | | **烧录速度** | 低速(~115200bps) | 高速(~20Mbps) | | **适用场景** | 简程序上传和日志监控 | 复杂项目开发和深度调试 | --- ### **二、纯UART烧录方案(推荐基础方案)** #### 1. 硬件连接 ``` ESP32-S3 ↔ USB转TTL模块 GPIO43 (U0TXD) → RX GPIO44 (U0RXD) → TX GND → GND ``` ⚠️ 注意:需**手动进入下载模式**: - 保持`GPIO0`拉低(接GND) - 短暂按下`EN`(复位)按钮 #### 2. VSCode环境配置(以PlatformIO为例) 1. 安装PlatformIO插件 2. 创建项目时选择`ESP32-S3 Dev Module` 3. 修改`platformio.ini`配置: ```ini [env:esp32-s3] platform = espressif32 board = esp32-s3-devkitc-1 framework = arduino upload_port = COMx ; 替换为实际端口 upload_speed = 921600 ; 提高烧录速度 ``` #### 3. 烧录操作 - 通过`PlatformIO: Upload`按钮触发烧录 - 观察输出窗口的进度提示 --- ### **三、JTAG调试方案(需硬件支持)** #### 1. 硬件准备 - 调试器:ESP-Prog(约$10)或自制FT2232H模块 - 接线方式: ``` ESP32-S3 ↔ JTAG调试器 GPIO39 → TDO GPIO40 → TDI GPIO41 → TCK GPIO42 → TMS GND → GND ``` #### 2. VSCode配置(ESP-IDF插件) 1. 安装ESP-IDF插件 2. 创建项目时选择`JTAG`调试配置 3. 添加调试配置文件`.vscode/launch.json`: ```json { "version": "0.2.0", "configurations": [ { "name": "ESP32-S3 JTAG Debug", "type": "espidf", "request": "launch", "debugPort": "/dev/ttyUSB0", "jtagDevice": "esp-prog" } ] } ``` --- ### **四、关键问题解决方案** 1. **UART模式烧录失败**: - 检查`GPIO0`是否在烧录期间保持低电平 -降低波特率至`115200` - 更新CP210x/CH34x驱动 2. **JTAG连接异常**: - 确认`openocd`配置包含ESP32-S3支持 - 使用命令验证连接: ```bash openocd -f board/esp32s3-builtin.cfg ``` --- ### **五、综合建议** - **优先选择UART**:若仅需烧录基础固件,UART方案成本最低 - **推荐JTAG**:若涉及驱动开发或复杂逻辑调试,建议投资$10购买ESP-Prog调试- 扩展阅读:ESP32-S3官方调试指南 $$https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-guides/jtag-debugging/$$ 通过合理选择工具链,即使仅使用UART接口也能完成基本开发,但专业级调试仍需依赖JTAG硬件支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值