STM32 SWD协议-端口号

STM32 SWD协议-端口号,stm32,openocd,swd,Stm32,Openocd,Swd,我开始在STM32探索板中使用SWD功能。我将openocd跟踪输出重定向到文本文件(因为我找不到任何适用于Linux的好的SWD监视器)。我不知道为什么我只发送了一个字符,却得到了两个字符 在我的输出文件中,每个字符前面都有不同的ASCII码(大多数情况下不可打印)。由于端口的原因,前面的代码是常量。例如: Port 0: 0x01 [Character] 0x01 [Character] etc. Port 1: 0x09 [Character] 0x09 [Character] etc.

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

我使用的CubeMX&HAL实用程序如下所示:

ITM->PORT[portNum].u8 = (uint8_t)ch; 
发送“ch”字符

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


我会明白在社会福利署,前面的代码是什么?

看看我的答案:

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


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

为什么我需要使用bite运算什么是bite运算?我指的是C中的逐位运算,如>>运算符到位移位。