用SWO代替printf打印时的注意事项

用SWO代替printf打印时的注意事项用SWO代替串口实现printf打印功能,是个很高效的调试手段。但在实际应用中遇到一个问题。用法参考以下文章:SWO打印输出配置https://blog.csdn.net/ybhuangfugui/article/details/94378265使用SWO代替UART,实现Printf打印功能https://www.cnblogs.com/wanban/p/11789160.html问题现象使用仿真器调试时,在运行过程中死机。原因分析…

大家好,欢迎来到IT知识分享网。

用SWO代替串口实现printf打印功能,是个很高效的调试手段。

但在实际应用中遇到一个问题。

 

用法

参考以下文章:

SWO打印输出配置

https://blog.csdn.net/ybhuangfugui/article/details/94378265

 

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

https://www.cnblogs.com/wanban/p/11789160.html

 

 

问题现象

使用仿真器调试时,在运行过程中死机。

 

原因分析

1,停止运行,发现程序死在这里:

用SWO代替printf打印时的注意事项

 

2,查阅STM32参考手册,找到ITM->PORT[0]的地址:

用SWO代替printf打印时的注意事项

查看该外设地址的值,一直为0:

用SWO代替printf打印时的注意事项

3,查看SystemViewer=>DBG,发现CR寄存器中的TRACE_IOEN为0.

用SWO代替printf打印时的注意事项

4,手动勾选TRACE_IOEN后,0xE0000000开始的32个字的值都变成为0x00000001,即可跳出while循环,继续正常运行。

用SWO代替printf打印时的注意事项

 

5,进一步分析,原因是没有选择Trace Enable:

用SWO代替printf打印时的注意事项

 

解决措施

为了防止忘记选择Debgu->Setting->Trace->Trace Enable,导致运行中进入死循环,于是,在初始化时设置TRACE_IOEN为1.

 

在初始化时添加以下代码:

	// 使能跟踪引脚分配
	DBGMCU->CR |= DBGMCU_CR_TRACE_IOEN;

同时,使能激励端口:

	// 使能激励端口1
	ITM->TER = 0x0001;
	ITM->TPR = 0x0001;

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23816.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信