问题如图

在这里插入图片描述

排查原因

这个错误信息是:

No Cortex-M Device found in JTAG chain. Please check the JTAG cable and the connected devices.
意思是 J-Link 没能在 JTAG/SWD 链路中找到 Cortex-M 设备。


既然你说“其他工程都没问题”,那硬件、线缆、J-Link 本身基本可以排除。
👉 那就说明问题很可能出在这个工程的调试配置或固件本身

下面是最常见的几个原因和排查思路(按优先级从高到低)👇


🧩 一、检查 Keil 调试接口设置

  1. 打开:Project -> Options for Target -> Debug -> Settings

  2. J-Link/J-Trace Cortex 配置窗口中,确认:

    • Interface 选择的是 SWD(不是 JTAG)
    • Device 正确,比如 GD32F415, STM32F103C8, HC32F460 等(要和你的 MCU 型号一致)
    • SWD speed 可以先改成低一点,比如 1000 kHz 或 500 kHz
      太高的速度有时会导致握手失败。

🔹 若你之前在别的工程里能连上,那么对比一下两个工程的这部分配置是否不一样。


⚙️ 二、工程里可能启用了低功耗模式或关闭了 SWD 引脚

有时候代码会:

  • MCU 进入了 Sleep/Standby/PowerDown 模式;
  • 或者 复用了 SWD 引脚(PA13/PA14 或 SWCLK/SWDIO)当作 GPIO 输出;
  • 或者程序跑飞后 SWD 被关掉。

🧩 解决办法:

  • 重新上电后立即下载(上电瞬间点“Download”),在程序运行前接入调试;

  • 或者使用 J-Link Commander:

    JLinkExe
    > connect
    

    然后在弹出的对话框中指定正确的芯片型号、SWD 接口;
    若能连接成功,可以执行:

    erase
    

    来擦除 Flash,让芯片重新可下载。


🪫 三、电源或复位问题

即使是同一个板子,如果这个工程的电源初始化或复位控制不同,也可能导致:

  • MCU 没启动(比如电源 rail 没上)
  • 或者 RST 脚被拉低

可尝试:

  • 测量 3.3V 是否正常;
  • 检查 NRST 是否被其他电路一直拉低;
  • 检查是否用到外部电源时没供给 MCU。

🔄 四、调试下载算法配置错误

在 Keil:
Project -> Options for Target -> Utilities -> Settings
检查 Flash Download 里是否选对了芯片的 Flash 编程算法。

比如:
如果你之前的工程是 GD32F103C8,而这个工程误选成了 STM32F103C8,就会出问题。


🧹 五、缓存/临时文件异常

有时 Keil 的配置文件损坏也会导致奇怪现象。

可以尝试:

  • 删除工程目录下的:

    *.uvguix
    *.uvoptx
    

    文件(这是 Keil 的用户配置文件);

  • 然后重新打开工程,重新设置 J-Link 参数。


✅ 建议排查顺序

  1. 确认 SWD 模式 + 正确芯片型号
  2. 降低 SWD 速度
  3. 尝试复位后立刻下载
  4. 在 JLinkExe 里尝试手动连接并擦除
  5. 检查 SWD 引脚是否被占用
  6. 对比 Flash 下载算法

如果你方便的话,把你这个工程的:

  • .uvprojx 配置里设置的目标芯片名;
  • 以及调试配置(Debug → Settings 界面截图)
    发我看下,我能帮你精准定位是哪一项出问题。

要不要我帮你写一段 J-Link Commander 的“强制解锁”步骤?

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐