最简单直接且有效的方式就是这篇文章:使用SWO代替UART,实现printf打印功能。
实现STM32的printf输出的四种方式
四种实现方式,我认为第二种最简单可行。
方式一二三通用配置
方式一:Keil官网说明 :
https://www.keil.com/support/man/docs/jlink/jlink_trace_itm_viewer.htm
方式二 和 方式三:
需添加两个头文件stm32f10x.h 和 stdio.h,方式三为串口方式,非ITM方式,还需进行硬件资源配置,看文章了解了就顺便记录下来了。
方式四:添加源文件以及初始化文件
需添加两个头文件stm32f10x.h 和 stdio.h,这点儿是后来弄懂其它方式后才了解到的。
为什么要用ITM
有一个模块的例程代码就用到了printf,然后就想到了之前鱼鹰写的ITM方式调试,就顺势了解了一下怎么实现的,调试方式的进步可能带来工作效率大的提升。
ITM的SWO输出优势
- 硬件:不占用外设。串口是MCU的片内外设,会占用一个外设资源,影响硬件设计。
- 代码:不需要写驱动。串口的话针对不同的MCU需要重新编写串口的驱动。
- 调试:不会引入中断嵌套,也避免了此类问题。串口输出一般使用中断方式发送,调试时可能需要在中断中观察某些信息,这样中断嵌套就容易出现问题。
- 速度:SWO的速度比串口快得多。在时序要求较高的情况下对代码的影响较小。发送相同的字符串,SWO的速度是串口的8.7倍(一篇文章的测试数据)。
目标
仿真器连接单片机 与 PC,在线调试,将“Hello World”输出到PC上,在开发工具(MDK) 的某个窗口显示。
原理
单片机借助PC的显示/输入设备 实现了自己的 输出和输入。
开发环境搭建:STM32 + MDK + 实现方式(ITM机制:使用硬件接口:五线SWD