大家好,欢迎来到IT知识分享网。
用SWO代替串口实现printf打印功能,是个很高效的调试手段。
但在实际应用中遇到一个问题。
用法
参考以下文章:
SWO打印输出配置
https://blog.csdn.net/ybhuangfugui/article/details/94378265
使用SWO代替UART,实现Printf打印功能
问题现象
使用仿真器调试时,在运行过程中死机。
原因分析
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;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23816.html