我开始在我的STM32探索板中使用SWD功能。我将 openocd 跟踪输出重定向到文本文件(因为我找不到任何适用于 Linux 的好 SWD 显示器)。我不知道为什么当我只发送一个字符时,我会得到两个字符。
在我的输出文件中,每个字符前面都有不同的 ASCII 代码(大多数情况下不可打印)。由于端口的原因,前面的代码是恒定的。例如:
Port 0:
0x01 [Character] 0x01 [Character] etc.
Port 1:
0x09 [Character] 0x09 [Character] etc.
Port 2:
0x11 [Character] 0x11 [Character] etc.
Port 3:
0x19 [Character] 0x19 [Character] etc.
我在 github 代码中找到使用 [前面的代码]>> 3 个公式来获取端口号的人。它的作品。
我正在使用CubeMX和HAL实用程序,如下所示:
ITM->PORT[portNum].u8 = (uint8_t)ch;
发送"ch"字符。
为什么我需要使用字节操作?前面的代码除了端口号之外还有其他信息吗?我尝试在二元制中为此提供资金,但每个示例都使用 ST 显示器
我会明白社署前面的代码到底是什么?
看看我的回答:https://stackoverflow.com/a/57014035/6552613
您看到的是成帧,它使来自多个 ITM 端口的数据能够多路复用到 SWO 引脚上的字节流上。
如果想要确切地了解框架是如何构建的,请阅读 ARM 文档 DDI0314 的"检测跟踪宏单元"一章。