
一. STM32 调试特性简介 STM32 的 CPU 采用的是 Cortex-M 系列的内核(M3 或 M4),CM3 和 CM4 的调试技能较之普通的单片机有了质的飞跃。一般情况下,CM3 的调试功能可被分为两类, 1. 侵入式调试 停机以及单步执行程序 硬件断点 断点指令(BKPT) 数据观察点,作用于单一地址、一个范围的地址,以及数据大的值 访问寄存器的值 调试监视器异常 2. 非侵入式调试 在内核运行的时候访问存储器 指令跟踪,需要通过可选的嵌入式跟踪宏单元(ETM) 通常情况下,我们采用的是侵入式调试,这种调试会打破程序的全速运行。非侵入式调试则可以再保证在程序全速运行的情况下,了解程序运行的情况,当调试大型软件和多任务系统时,非侵入式调试有着不可比拟的作用。 二. IAR 下使用 J-Trace 进行指令跟踪 1. 使能 ETM 接口 两种方法,文件见附件: 通用方法在初始化代码中添加
2. ETM Trace Settings ![]() Trace port width: CM3 和 CM4 内核支持 1 位,2 位,4 位数据输出,具体的数据宽度需考虑实际硬件设计情况。 Trace buffer size:J-Trace 内部的缓冲区大小为 2Mbytes,FIFO 结构。 Stall processor on FIFO full: FIFO 在 CM3 内核中,建议开启。 3. ETM Trace 窗口 ![]() 工具栏从左到右依次是: 使能 ETM Trace 清空 PC 端 Trace 记录 在 Trace 中嵌入源码,上图中的灰色代码 int main(void) 浏览 Trace 所对应的源码 搜索 存储 ETM Trace Setting 使能 ETM Trace 后,缺省情况下 Trace 已被触发,此时就可以对程序进行指令跟踪了。 4. 利用 Trace 断点跟踪关心的代码 非侵入式调试时,往往会对某一段代码的运行状况更敢兴趣。这里所采用的例子是 Cube 中 FreeRTOS_SemaphoreFromISR,所关心的就是程序中运行程序后,通过外部中断释放信号量,从而唤醒被阻塞的任务(涉及任务系统调度)。利用 Trace 功能可以捕获RTOS 是如何进行任务调度的。 通过在相关的设置 Trace Star/Stop 的断点,就可以实现此项功能,需要注意的是断点条件可以设置,数据断点:Read/Write 指令访问断点:Fetch 只有在正确的设置触发条件后才可以实现调试目的。 ![]() IAR 下的 Trace 还具有其他功能,比如函数运行统计等,这里就不一一列举了。 |
【经验分享】STM32CubeIDE汉化
手把手教你VSCode搭建STM32开发环境
RTOS在STM32中的应用
【下载有礼】STM32 Finder华为应用商店正式上线!移动选型工具助力开发效率升级
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧