新闻详情

新闻详情

首页 / 资讯中心 / 详情

KEIL调试报错TRACE HW not present?STM32 Trace配置排查与修复指南

发布时间:2026/9/19 6:32:24来源:尧图网络
KEIL调试报错TRACE HW not present?STM32 Trace配置排查与修复指南
1. 这个报错到底卡在哪儿了搞STM32开发的朋友十个里面有八个在KEIL里点下Debug按钮的那一刻被一行红字糊过脸——“TRACE HW not present”。我第一次遇到这玩意儿的时候正赶着给一个基于STM32F103的温控板子做在线调试串口那边数据死活对不上想着进Debug单步看看寄存器结果KEIL直接甩脸子不让我进。当时第一反应是ST-LINK坏了换了根线、换了个模块甚至把电脑USB口都换了一遍折腾了快两个小时才发现问题根本不在硬件本身而是KEIL里一个跟“Trace”相关的配置项在作妖。这个报错说白了就是KEIL在启动调试会话时试图去访问Cortex-M内核里的Trace硬件单元比如ITM、DWT、ETM这些但发现目标芯片或者调试器根本不支持或者配置对不上于是直接抛出一个“硬件不存在”的提示。它不一定意味着你的板子坏了更多时候是配置层面的错位。很多人看到“HW not present”就下意识觉得是硬件故障其实这个“HW”指的是芯片内部的Trace组件不是你的ST-LINK或者开发板。这篇文章我打算把这个问题彻底拆开讲清楚。从Trace机制的基本原理到KEIL里哪些选项会触发这个报错再到不同芯片尤其是STM32F0/F1/F4/H7这些常见系列和不同调试器ST-LINK V2、V3、J-LINK、DAPLink下的具体处理方式最后给出一套可以直接抄作业的排查流程。不管你是刚装好KEIL5的新手还是已经画过好几版STM32板子的老手只要你在调试环节被这个报错拦住过这里应该都能找到对应的解法。需要提前说明的是Trace功能本身是一个可选项不是所有STM32芯片都带完整的Trace硬件。比如STM32F0系列就只有有限的DWT和ITM支持没有ETM指令追踪而STM32F1、F4这些经典款虽然有ITM和DWT但ETM也不是全系标配。KEIL默认的调试配置里有时候会勾选一些Trace相关的选项如果你的芯片恰好不支持就会直接报“TRACE HW not present”。所以这个问题的本质是调试器配置与目标芯片实际能力之间的匹配问题。2. Trace机制与报错触发原理拆解2.1 Cortex-M内核里的Trace组件到底是什么要理解这个报错得先知道Cortex-M内核里到底有哪些Trace相关的硬件。ARM给Cortex-M系列定义了一套调试和追踪架构核心组件包括以下几个ITMInstrumentation Trace Macrocell用于软件层面的printf调试输出可以把程序里的变量、日志通过SWO引脚发出来。这个是最常用的Trace组件很多人在KEIL里用ITM Viewer看printf输出靠的就是它。DWTData Watchpoint and Trace用于数据观察点和性能计数可以统计指令周期、睡眠周期也能设置数据断点。这个组件在STM32F0以上基本都有。ETMEmbedded Trace Macrocell指令级追踪能记录CPU执行的每一条指令流。这个组件不是所有芯片都有STM32F1就没有F4部分型号有H7系列才比较完整。TPIUTrace Port Interface UnitTrace数据的输出接口负责把ITM、DWT、ETM的数据打包送到外部调试器。TPIU可以配置成SWO单线模式或者并行Trace Port模式。KEIL在启动调试时会根据你选的调试器类型和Trace配置去访问这些组件。如果配置里启用了某个Trace功能但芯片实际没有对应的硬件或者调试器不支持就会报“TRACE HW not present”。2.2 为什么KEIL会默认去访问Trace硬件很多人会问我明明没主动开Trace功能为什么KEIL还要去访问原因在于KEIL的调试配置里有一个Trace选项卡里面的设置会直接影响调试器初始化流程。具体来说以下几个地方会触发Trace硬件的访问Debug选项卡里的“Settings”按钮点进去之后有一个Trace标签页里面可以配置Core Clock、Trace Port、ITM Stimulus Port等。如果这里勾选了“Enable”或者配置了不正确的Core ClockKEIL就会尝试初始化Trace单元。调试器选择如果你选的调试器是ST-LINK但ST-LINK的固件版本比较老或者你选的接口是JTAG而不是SWDTrace初始化可能会失败。目标芯片的SFR配置有些STM32芯片的调试寄存器里Trace功能默认是关闭的需要先使能DBGMCU相关的时钟和引脚复用KEIL如果直接去访问就会报错。我实测下来最常见的触发场景是在Debug Settings的Trace页里Core Clock填了一个值但芯片实际没有Trace硬件或者SWO引脚没有正确配置。这时候KEIL会认为你要用Trace功能于是去初始化TPIU结果发现硬件不存在直接报错。2.3 不同STM32系列的Trace能力差异这里我整理了一个常见STM32系列的Trace硬件支持情况方便你对照自己的芯片芯片系列ITMDWTETMSWO引脚备注STM32F0部分有有无部分有F030/F070部分型号无ITMSTM32F1有有无有经典款ITM可用STM32F2有有无有与F4类似STM32F3有有无有部分型号有ETMSTM32F4有有部分有有F429以上有ETMSTM32F7有有有有完整Trace支持STM32H7有有有有完整Trace支持STM32L0部分有有无部分有低功耗系列Trace精简STM32L4有有无有部分型号有ETMSTM32G0有有无有新一代入门款STM32G4有有有有完整Trace支持从表里可以看出ETM是最稀缺的很多系列都没有。如果你的KEIL配置里启用了ETM相关的Trace功能而芯片不支持就会直接报“TRACE HW not present”。ITM和DWT的覆盖率比较高但F0和L0的部分低端型号也有缺失。注意即使芯片支持ITM如果SWO引脚没有在GPIO复用里正确配置或者调试器的SWO线没有接KEIL在初始化Trace时也可能报错。这时候报错信息可能还是“TRACE HW not present”但实际原因是引脚配置问题。2.4 调试器固件与Trace支持的关系除了芯片本身调试器的固件版本也会影响Trace功能。以ST-LINK为例ST-LINK V2早期固件V2.J17.S4以下对SWO的支持不完整如果KEIL尝试用SWO输出ITM数据可能会报错。需要升级到V2.J27.S7以上。ST-LINK V3原生支持SWO和Trace Port但需要KEIL版本在5.25以上才能正确识别。J-LINK对Trace的支持比较完善但需要在J-Link设置里正确配置Trace Port和Core Clock。DAPLink部分DAPLink固件不支持SWO如果KEIL配置了Trace也会报错。我遇到过好几次客户用的是某宝上买的ST-LINK V2克隆版固件是V2.J17.S4KEIL里一开Trace就报“TRACE HW not present”。后来用ST-LINK Utility升级了固件问题直接消失。所以排查这个问题时调试器固件版本是一个必须检查的点。3. KEIL里哪些配置会触发这个报错3.1 Debug Settings里的Trace选项卡详解打开KEIL点Options for Target进Debug选项卡右边选好调试器后点Settings会弹出一个对话框。这个对话框里有好几个标签页其中Trace标签页就是问题的核心区域。我逐个选项说一下Core Clock这个填的是芯片的系统时钟频率单位MHz。比如STM32F103跑72MHz这里就填72。如果填错了Trace时序会对不上KEIL可能报错。但更关键的是如果芯片没有Trace硬件这个值填了也没用反而会触发初始化失败。Trace Port可以选择SWO模式或者Trace Port模式。SWO是单线输出Trace Port是并行输出。大部分STM32只支持SWO如果选了Trace Port就会报“TRACE HW not present”。ITM Stimulus Port这里可以勾选要启用的ITM端口。如果芯片没有ITM勾了就会报错。Enable这个复选框如果勾上KEIL会在调试启动时初始化Trace单元。如果芯片不支持直接报错。我的经验是如果你不需要用ITM Viewer看printf输出也不需要用Trace功能做性能分析直接把Trace页里的“Enable”取消勾选Core Clock清空Trace Port选“None”。这样KEIL就不会去碰Trace硬件报错自然消失。3.2 调试器选择与接口模式的影响在Debug选项卡里调试器选的是ST-LINK还是J-LINK接口选的是SWD还是JTAG也会影响Trace初始化SWD模式SWD只用两根线SWCLK和SWDIOSWO是第三根线可选。如果SWO没接但KEIL配置了Trace就会报错。JTAG模式JTAG有TCK、TMS、TDI、TDO、nTRST五根线Trace输出通常用额外的Trace Port引脚。如果芯片不支持Trace PortKEIL也会报错。我建议除非你明确需要Trace功能否则接口一律选SWDTrace页里全部禁用。这样最省事也最不容易出问题。3.3 芯片包版本与调试配置的兼容性KEIL的芯片包Device Family Pack版本也会影响调试配置。比如STM32F1的芯片包早期版本里默认的调试配置可能启用了Trace而后期版本改成了默认禁用。如果你用的是老版本的芯片包新建工程时可能会继承一个带Trace的配置模板一调试就报错。解决办法是在KEIL的Pack Installer里把对应的STM32芯片包更新到最新版。更新后新建工程的默认调试配置会更合理。如果不想更新也可以手动在Debug Settings里把Trace页的配置清掉。3.4 工程文件里的调试配置残留有时候你从别人那里拷贝了一个工程或者从网上下了一个例程里面的调试配置可能带着Trace相关的设置。这些设置存在.uvoptx文件里KEIL5或者.uvopt文件里KEIL4。如果你直接打开工程调试就会继承这些配置触发报错。排查方法是打开工程的Options for Target进Debug Settings看Trace页里有没有被配置过。如果有全部清掉。或者直接删掉.uvoptx文件让KEIL重新生成默认配置。4. 手把手排查与修复流程4.1 第一步确认芯片是否真的支持Trace在动手改配置之前先确认你的芯片到底有没有Trace硬件。最直接的方法是查芯片的参考手册Reference Manual看里面有没有ITM、DWT、ETM相关的章节。或者查数据手册Datasheet里的“Debug”部分。以STM32F103C8T6为例参考手册RM0008里第31章是“Debug support”里面明确写了有ITM和DWT但没有ETM。所以如果你在KEIL里启用了ETM相关的Trace功能就会报错。如果你手头没有手册也可以用STM32CubeMX或者ST-LINK Utility连上芯片读一下DBGMCU_IDCODE寄存器看看芯片型号然后去网上查对应的Trace支持情况。4.2 第二步检查KEIL的Trace配置并清空确认芯片支持情况后打开KEIL的Debug Settings进Trace页把“Enable”复选框取消勾选。把“Core Clock”里的值清空或者填0。把“Trace Port”选成“None”。把“ITM Stimulus Port”里的勾全部取消。点OK保存重新进Debug。如果这时候不报错了说明问题就是Trace配置引起的。如果你确实需要用ITM看printf输出那就需要进一步配置而不是简单禁用。4.3 第三步升级调试器固件如果清空Trace配置后还报错或者你确实需要Trace功能那就检查调试器固件。以ST-LINK V2为例下载ST-LINK Utility或者STM32CubeProgrammer。连上ST-LINK打开软件进Firmware Upgrade界面。看当前固件版本如果低于V2.J27.S7点升级。升级完成后重新插拔ST-LINK再进KEIL调试。J-LINK的话用J-Link Commander或者J-Flash升级固件。DAPLink的话拖拽固件文件到虚拟U盘即可。4.4 第四步检查SWO引脚配置如果你需要用ITM输出SWO引脚通常是PB3或者PA10具体看芯片型号必须正确配置。以STM32F103为例SWO是PB3但PB3默认是JTDO功能需要先禁用JTAG只用SWD然后把PB3配置成AF推挽输出复用功能选SWO。在代码里需要使能DBGMCU的Trace时钟// 使能DBGMCU时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 禁用JTAG保留SWD GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 配置PB3为SWO GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure);然后在KEIL的Trace页里Core Clock填72Trace Port选SWOITM Stimulus Port勾选0。这样ITM输出才能正常工作。4.5 第五步换调试器或换接口模式验证如果以上步骤都试过了还报错那就换一个调试器试试。比如把ST-LINK换成J-LINK或者把SWD换成JTAG。如果换了之后不报错说明原来的调试器有问题。如果换了还报错那可能是芯片本身的问题比如芯片被锁了或者调试接口被禁用了。芯片被锁的情况比较少见但如果你之前不小心写了选项字节Option Bytes把调试接口禁了就会连不上。这时候需要用STM32CubeProgrammer的“Full Chip Erase”功能擦除整个芯片恢复调试接口。5. 常见问题速查与避坑经验5.1 常见问题速查表问题现象可能原因解决方法一进Debug就报TRACE HW not presentTrace页里Enable被勾选芯片不支持取消Enable清空Core Clock报错后KEIL卡死调试器固件太老Trace初始化超时升级ST-LINK/J-LINK固件只有部分工程报错工程.uvoptx文件里有Trace配置残留删除.uvoptx重新生成换了芯片后报错新芯片不支持旧工程的Trace配置按新芯片能力重新配置TraceITM Viewer无输出SWO引脚没配置或Core Clock填错检查GPIO复用和时钟频率报错后连正常调试都进不去调试接口被选项字节禁用用CubeProgrammer全片擦除5.2 我踩过的几个坑第一个坑是Core Clock填了但芯片没Trace。有一次我用STM32F030F4P6做一个小项目KEIL里Trace页的Core Clock默认填了48我没注意一调试就报错。后来把Core Clock清空问题解决。F0系列很多型号没有ITM填了Core Clock反而会让KEIL去初始化Trace。第二个坑是ST-LINK克隆版固件太老。某宝上买的ST-LINK V2固件是V2.J17.S4KEIL 5.30里一开Trace就报错。升级到V2.J27.S7后正常。所以买调试器时最好问一下卖家固件版本或者自己升级。第三个坑是工程从别人那里拷来.uvoptx里带着Trace配置。有一次帮客户调一个STM32F407的板子工程是别人给的一调试就报错。我查了半天芯片手册确认F407支持ITM但就是报错。后来发现.uvoptx里Trace页的Trace Port选的是“Trace Port”而不是“SWO”F407只支持SWO所以报错。改成SWO后正常。5.3 避坑建议新建工程时先检查Debug Settings里的Trace页把不需要的Trace功能全部禁用。这是最省事的做法。调试器固件保持最新尤其是ST-LINK V2建议升级到V2.J27.S7以上。不要随便从网上拷工程如果拷了先删掉.uvoptx文件让KEIL重新生成配置。需要用ITM输出时先确认芯片支持ITM再配置SWO引脚最后在KEIL里填对Core Clock。如果报错后连正常调试都进不去检查选项字节里的调试接口配置必要时全片擦除。6. 不同调试器下的具体处理方式6.1 ST-LINK V2/V3的处理差异ST-LINK V2和V3在Trace支持上有明显差异。V2的SWO引脚是第13脚在20针JTAG接口上V3的SWO引脚位置不同而且V3原生支持Trace Port。如果你用的是V2KEIL里Trace Port只能选SWO如果用V3可以选SWO或者Trace Port。另外V2的固件升级需要用ST-LINK UtilityV3需要用STM32CubeProgrammer。升级时注意不要断电否则可能变砖。6.2 J-LINK的Trace配置要点J-LINK对Trace的支持比较完善但配置项也更多。在KEIL里选J-LINK后进SettingsTrace页里可以配置Core Clock、Trace Port、ITM Port等。J-LINK还需要在J-Link Commander里设置Trace Port的引脚和时钟否则KEIL里配置了也没用。我一般用J-LINK时会先在J-Link Commander里执行以下命令J-Link exec SetTracePort 0 0 0 0 J-Link exec SetCoreClock 72然后再进KEIL调试。这样Trace初始化会更稳定。6.3 DAPLink的兼容性说明DAPLink的Trace支持取决于固件版本。部分DAPLink固件不支持SWO如果KEIL里配置了Trace就会报错。解决办法是升级DAPLink固件或者直接在KEIL里禁用Trace。如果你用的是CMSIS-DAP调试器建议先确认固件是否支持SWO再决定是否启用Trace功能。7. 从根上避免这个报错的工程配置习惯7.1 新建工程的调试配置模板我现在的习惯是新建一个STM32工程后第一件事就是进Debug Settings把Trace页里的配置全部清掉。具体操作Options for Target - Debug - Settings。进Trace页取消Enable清空Core ClockTrace Port选None。点OK保存。把这个配置导出成模板以后新建工程直接套用。KEIL支持把调试配置保存成模板在Project - Manage - Project Items里可以设置。这样每次新建工程都不会继承错误的Trace配置。7.2 团队协作时的配置文件管理如果是团队开发建议把.uvoptx文件加入版本控制但要在提交前确认Trace配置是干净的。或者干脆不提交.uvoptx让每个开发者本地生成。这样虽然每个人的调试配置可能不同但至少不会因为别人的错误配置导致自己报错。7.3 定期更新芯片包和调试器固件KEIL的芯片包和调试器固件更新比较频繁建议每隔几个月检查一次。芯片包更新后新建工程的默认调试配置会更合理调试器固件更新后Trace支持的稳定性会更好。我一般用Pack Installer检查芯片包更新用ST-LINK Utility检查ST-LINK固件更新。8. 个人实操体会这个“TRACE HW not present”报错我前后遇到过不下二十次涉及STM32F0、F1、F4、H7多个系列调试器从ST-LINK V2到V3、J-LINK、DAPLink都用过。总结下来九成以上的情况都是配置问题而不是硬件故障。只要把KEIL里Trace页的配置清干净或者升级一下调试器固件问题基本都能解决。唯一一次真正遇到硬件问题是一个客户寄来的STM32F407板子SWO引脚被外部电路拉死了导致Trace初始化失败。后来把SWO引脚上的电容去掉问题解决。所以如果你试了所有配置方法都不行可以查一下SWO引脚的外部电路看看有没有被意外拉低或者拉高。最后分享一个小技巧如果你不确定芯片是否支持Trace可以在KEIL的Debug Settings里把Trace页的配置全部清空然后进Debug在Command窗口里输入ITM 0 1如果芯片支持ITM会返回OK如果不支持会返回错误。这样可以在不触发报错的情况下快速确认芯片的Trace能力。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

自建桌面端CRM系统实战:从需求拆解到权限管控的完整指南 2026/9/19 7:17:31

自建桌面端CRM系统实战:从需求拆解到权限管控的完整指南

前阵子团队内部正式上线了一套桌面端客户关系管理系统,代号叫 DeskcommCRM。这套东西说实话没有多炫技,技术含量也不高,但它把我们销售和客服团队每天最头疼的事给理顺了。如果你现在也面临类似的处境——客户信息散落在各个 Excel 和个人手机…

阅读更多 →
backtesting.py 快速上手:从一段策略到一份看得懂的回测报告 2026/9/19 7:17:31

backtesting.py 快速上手:从一段策略到一份看得懂的回测报告

backtesting.py 快速上手:从一段策略到一份看得懂的回测报告 【免费下载链接】backtesting.py 🔎 📈 🐍 💰 Backtest trading strategies in Python. 项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting…

阅读更多 →
从项目交付视角看Altium Designer:原理图、封装到OutJob的实战进阶 2026/9/19 7:17:31

从项目交付视角看Altium Designer:原理图、封装到OutJob的实战进阶

获奖名单终于可以放出来了。这周后台私信一直在闪,都是在问《Altium官方高级实战书》活动的结果。统一回复:名单已经定稿,核对路径和领奖截止时间放在第2节,中奖的记得按流程操作;没中奖的先别急着关页面,这…

阅读更多 →
MBAM企业级BitLocker加密治理实战指南 2026/9/19 7:17:31

MBAM企业级BitLocker加密治理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Windows自带磁盘管理无损分区教程:C盘扩容、新建数据盘全攻略 2026/9/19 7:17:31

Windows自带磁盘管理无损分区教程:C盘扩容、新建数据盘全攻略

我买过不少电脑,也帮亲戚朋友处理过无数台“C盘飘红”的机器。大多数时候,问题根源根本不是电脑配置不行,而是磁盘分区从一开始就没规划好。这篇教程不聊虚的,直接用Windows系统自带的磁盘管理工具,手把手教你怎么无损…

阅读更多 →
MES级系统集成实战:数据采集、数据交换与权限建模 2026/9/19 7:14:30

MES级系统集成实战:数据采集、数据交换与权限建模

简介:面向制造业信息化规划、MES系统设计及系统集成相关技术人员,这份PDF文档以架构图形式系统梳理了企业MES级系统集成的整体框架,涵盖统一门户访问、数据处理、系统数据采集、业务系统数据、运维审计、管理运维支持、数据交换、安全配置核查…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞