STM32 SWD协议-端口号

STM32 SWD protocol - port number

我开始在我的 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 代码中找到使用 [preceded code] >> 3 公式获取端口号的代码。其作品。

我正在像这样使用 CubeMX 和 HAL 实用程序:

ITM->PORT[portNum].u8 = (uint8_t)ch; 

发送"ch"个字符。

为什么我需要使用字节操作?这个前面的代码除了端口号还有其他信息吗?我尝试在文档中资助这个但是每个例子都使用 ST monitor

我会明白 SWD 中的前置代码到底是什么?

在这里看看我的回答:

您看到的是使来自多个 ITM 端口的数据能够多路复用到 SWO 引脚上的字节流的帧。

如果您想确切了解帧是如何构建的,请阅读 ARM 文档 DDI0314 的 "Instrumentation Trace Macrocell" 章节。