咨询一下STM32的printf输出到SWD口

一个欧洲的Versaloon用户提出一个很有意思的调试方法,据说在IAR下,可以吧printf的输出信息重定向到SWD接口,调试时直接可以在IDE的界面中显示。
有人知道是怎么实现的吗?

看了一下,貌似是可以使用SWO脚来实现这个功能

TOP

异步跟踪输出脚(TRACESWO)和TDO是复用的,它只能在SWD模式下使用,关键是printf的输出信息重定向到异步跟踪输出脚(TRACESWO),也就是说TRACESWO怎样才能使用。

SWO.jpg
2010-1-14 23:38

TOP

TRACESWO.jpg
2010-1-14 23:59


TRACECLKIN.jpg
2010-1-14 23:59


29.17.10 配置的例子
● 设置Debug Exception and Monitor Control 寄存器的TRCENA位;
● 在TPIU Current Port Size寄存器中写入期望值(默认是0x1,指示端口长度为1bit);
● 向TPIU Formatter and Flush Control寄存器中写入0x102(默认值);
● 写TPIU Select Pin Protocol寄存器,选择同步或异步模式。例如写0x2选择NRZ编码的异步模式(类似URAT);
● 向DBGMCU Control寄存器写入0x20(置位IO_TRACEN),为异步模式分配TRACE的I/O口。此时TPIU将发出一个同步包(FF_FF_FF_7F);
● 配置ITM并且写ITMStimulus寄存器输出数据。

TOP

已经确认,软件实现并不复杂,实现一个putc,吧数据赋值给SWO的相关寄存器就可以了。
调试工具也只是需要把SWO接到UART的RX脚就可以了,实现一个简单的CDC就能实现这个功能。

TOP

不过这个功能似乎意义也不是很大。

TOP

呵呵,还是有一些意义的,IAR和MDK都有这个功能,调试时直接在GUI中显示实时星系信息

TOP

调试大一点的软件的时候,这个功能应该还是很有意义的
一点一滴,积沙成山

TOP

已经确认,软件实现并不复杂,实现一个putc,吧数据赋值给SWO的相关寄存器就可以了。
调试工具也只是需要把SWO接到UART的RX脚就可以了,实现一个简单的CDC就能实现这个功能。 ...
simonqian 发表于 2010-1-15 02:49


明白了,你的意思是说把SWO接到UART的RX脚,然后在串口调试器或MDK或IAR来查看信息而不占用原来的USART口?

TOP

是的,可惜偶的VersaloonRC5版本不支持这个了
正式版本中会增加这个功能,目前已经实现的功能包括STM32_JTAG/SWD调试,STM32_ISP下载,STM8_SWIM下载,STM8的调试功能还在和ST谈。之后会增加STM32的SWO的Trace功能。

为什么这里的论坛还能开?
不是所有的论坛,包括技术论坛都要关闭吗?

TOP

Review opelc.org on alexa.com