单片机/MCU论坛
直播中

王磊

7年用户 1517经验值
私信 关注
[问答]

M487JIDAE如何使用ITM功能实现printf打印?

M487JIDAE如何使用ITM功能实现printf打印?

回帖(1)

龙献益

2024-1-16 16:55:01
M487JIDAE是一款基于ARM Cortex-M4内核的微控制器,支持ITM (Instrumentation Trace Macrocell)功能来进行调试输出。

要使用ITM功能来实现printf打印,你需要按照以下步骤进行配置:

1. 打开调试功能:在M487JIDAE芯片的配置文件或开发环境中,确保开启了调试功能。这通常包括启用调试接口与调试器连接。

2. 配置调试通道:ITM功能的打印输出使用ITM_STIMx寄存器来设置输出通道。在M487JIDAE中,可以使用CMSIS提供的宏定义来访问这些寄存器。需要将其中一个通道配置为用于printf打印。例如,可以使用ITM_STIM0作为通道:

```c
#define ITM_STIM0 (*(volatile unsigned int*)0xE0000000) // ITM stimulus port 0
```

3. 初始化ITM功能:在启用ITM之前,需要初始化ITM功能。可以使用ITM_Init函数来进行初始化。这个函数通常在启动代码中被调用,如下所示:

```c
#include // CMSIS-Core Cortex-M4 header file

void ITM_Init(void) {
  // Enable ITM and ITM_TCR register
  ITM->LAR = 0xC5ACCE55; // Unlock ITM registers
  ITM->TCR = 0x0001000D; // Enable ITM and ITM_TCR register
}
```

4. 重定向printf函数:在实现printf函数之前,需要将标准输出重定向到ITM输出通道。可以在重定向函数中将输出字符写入到ITM_STIM0寄存器,如下所示:

```c
#include

int fputc(int c, FILE *stream) {
  while((ITM->STIM0 & 1) == 0); // Wait for ITM_STIM0 to be ready
  ITM->STIM0 = (unsigned int)c; // Send character to ITM_STIM0
  return c;
}
```

5. 使用printf函数:现在,可以在代码中使用printf函数来进行调试输出。输出将会通过ITM_STIM0寄存器发送到调试器,并在调试窗口中显示。

```c
#include

int main(void) {
  ITM_Init(); // Initialize ITM
  printf("Hello, world!n");
  
  while(1);
}
```

以上是一种使用ITM功能来实现printf打印的方法。需要注意的是,这种方法需要调试器的支持,且输出结果将会显示在调试器的窗口中,而不是通过串口输出。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分