关于STM32的ITM 方式输出走了一些弯路

本文介绍了在STM32中通过ITM(Instrumentation Trace Macrocell)实现printf输出的四种方法,重点讨论了ITM的优势,如不占用外设资源、无需编写驱动、调试友好等。作者通过实践,最终成功利用SWO输出实现了高效、快速的调试信息传输,并分享了在Keil MDK环境下配置和代码实现的关键步骤,以及在此过程中遇到的问题和解决经验。
摘要由CSDN通过智能技术生成

最简单直接且有效的方式就是这篇文章:使用SWO代替UART,实现printf打印功能

实现STM32的printf输出的四种方式

  四种实现方式,我认为第二种最简单可行。

方式一二三通用配置

img

img

img

方式一:Keil官网说明 :

https://www.keil.com/support/man/docs/jlink/jlink_trace_itm_viewer.htm

image-20210904102055548

方式二 和 方式三:

需添加两个头文件stm32f10x.h 和 stdio.h,方式三为串口方式,非ITM方式,还需进行硬件资源配置,看文章了解了就顺便记录下来了。

image-20210904102105596

方式四:添加源文件以及初始化文件

需添加两个头文件stm32f10x.h 和 stdio.h,这点儿是后来弄懂其它方式后才了解到的。

image-20210904102009257

image-20210904095846765

image-20210904102023931

img

为什么要用ITM

  有一个模块的例程代码就用到了printf,然后就想到了之前鱼鹰写的ITM方式调试,就顺势了解了一下怎么实现的,调试方式的进步可能带来工作效率大的提升。

ITM的SWO输出优势

  • 硬件:不占用外设。串口是MCU的片内外设,会占用一个外设资源,影响硬件设计。
  • 代码:不需要写驱动。串口的话针对不同的MCU需要重新编写串口的驱动。
  • 调试:不会引入中断嵌套,也避免了此类问题。串口输出一般使用中断方式发送,调试时可能需要在中断中观察某些信息,这样中断嵌套就容易出现问题。
  • 速度:SWO的速度比串口快得多。在时序要求较高的情况下对代码的影响较小。发送相同的字符串,SWO的速度是串口的8.7倍(一篇文章的测试数据)。

目标

  仿真器连接单片机 与 PC,在线调试,将“Hello World”输出到PC上,在开发工具(MDK) 的某个窗口显示。

原理

  单片机借助PC的显示/输入设备 实现了自己的 输出和输入。

  开发环境搭建:STM32 + MDK + 实现方式(ITM机制:使用硬件接口:五线SWD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值