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

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

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

 

用法

参考以下文章:

SWO打印输出配置

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

 

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

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

 

 

问题现象

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

 

原因分析

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

 

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

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

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

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

 

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

 

解决措施

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

 

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

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

同时,使能激励端口:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值