1

我开始在我的 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”字符。

为什么我需要使用字节操作?这个前面的代码除了端口号还有其他信息吗?我尝试在 diocumentation 中为此提供资金,但每个示例都使用 ST 监视器

我会明白 SWD 中的确切代码是什么?

4

1 回答 1

1

看看我的答案:https ://stackoverflow.com/a/57014035/6552613

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

如果您想确切了解框架是如何构建的,请阅读 ARM 文档 DDI0314 的“仪器跟踪宏单元”一章。

于 2019-07-12T21:26:02.603 回答