使用SWO代替UART,实现Printf打印功能

JTAG接口中,有个SWO引脚,一直没有在乎,也没有去研究过是干吗用的。直到发现ST-LINK V2-1上也有个SWO引脚,因而去研究学习它的做用,用起来相比UART方得便多。异步

 

本文内容已经整理成PDF,提供给你们下载:函数

https://pan.baidu.com/s/1EhJulPbD6Cp5OohzpQY0Fg&shfl=sharepset   提取码:h43c学习

 

1  写在前面

SWOSerial Wire Output,串行线输出spa

SWVSerial Wire Viewer,串行线查看器调试

ITM:Instrumentation Trace Macrocell,仪器跟踪宏单元blog

 

  在Cortex-M3\M4\M7系列MCU内核的调试组件有一个仪器跟踪宏单元(ITM)ITM的主要用途是调试信息的输出(例如printf格式输出)。接口

  SWO是单引脚、异步串行通讯,可在Cortex-M3\M4\M7内核的MCU使用,由调试器探测支持利用MCU内核中ITM模块实现。资源

  对于STM32Cortex-M3\M4\M7内核的MCU都有SWO引脚。Cortex-M0内核的MCU没有此功能,例如STM32F0STM32L0等。开发

 

2  硬件平台

  将ST-LINK V2-1与核心板链接,SWO引脚链接到PB3文档

 

  若是核心板/开发板为JTAG接口,则能够这样接。JTAG接口中的SWO引脚实际上就是PB3引脚。

 

  查看STM32F103的数据手册,PB3引脚的复用功能为TRACESWO

 

3  代码部分

  和UART实现printf打印输出相似,UART是重定向printfUART,而这里是重定向到ITM。只需这两行代码就能实现SWO输出,不像UART同样还要编写UART驱动。(此函BSP_SWO.c文件中)

 

  

  其中的ITM_SendChar函数位于core_cm3.h(或cm4 cm7)中,直接调用便可。

 

 

4  Keil SWO输出配置

4.1  打开Keil工程,进行如图所示的配置。

 

4.2  Use MicroLIB勾上。

 

 

4.3  配置完成后,先编译经过,而后进入调试模式。

 

4.4  打开Debug (printf) Viewer窗口。

 

4.5  点全速运行,就能够看到MCU经过ST-LINK V2-1向编译器输出打印信息了。固然,单步调试也是能够的。

 

4.6  提供两份配置好的、完整的例程,供你们参考学习。要在您的工程中使用SWO调试,只需将BSP_SWO.cBSP_SWO.h这个两个文件添加到工程中便可。

 

 

5  STM32 ST-LINK Utility SWO输出配置

5.1  运行STM32 ST-LINK Utility,进行如图所示的配置,点击Start就能够了。

 

5.2  使用Keil下载程序以前,须要断开与STM32 ST-LINK Utility的链接。

 

不然不能下载,提示链接错误。

 

6  写在后面

打印信息用串口也能够作到,SWO的优点是什么?

1. 串口是MCU的片内外设,占用一个外设资源,而SWO不占用外设

2. 使用不一样的MCU须要从新编写串口驱动,而SWO不须要写驱动

3. 串口输出通常使用中断方式发送,调试时可能须要在中断中观察某些信息,这样中断嵌套就容易出现问题,而SWO没有中断问题

4. SWO的速度比串口快得多在时序要求较高的状况下对代码的影响较小。发送相同的字符串,SWO的速度是串口的8.7倍。

 

   虽然SWO不能像串口那样双向传输,而咱们用串口调试不少时候也只是使用TX输出而已。这样看来,SWO引脚用更好的方式替代了串口的TX引脚。

 

7  联系咱们

  若是您在学习SWO调试时遇到了什么问题,淘宝店铺搜索《万般电子》,经过旺旺联系咱们,咱们将全力以赴为您解答、解决。

 本文档由万般电子编写,版权全部。仅供我的学习使用,未经许可不得用于其它任何用途,不然追究相应责任。

相关文章
相关标签/搜索