M487JIDAE如何使用ITM功能实现printf打印?
M487JIDAE如何使用ITM功能实现printf打印?
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打印的方法。需要注意的是,这种方法需要调试器的支持,且输出结果将会显示在调试器的窗口中,而不是通过串口输出。
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| window下生成compilecommands.json的的方法被打赏¥22元 | |
| 【S32K3XX】GPIO中断配置被打赏¥26元 | |
| 【分享开发笔记,赚取电动螺丝刀】WS2812B的RGB灯介绍以及驱动方法被打赏¥25元 | |
| PTC与NTC功能常规对比被打赏¥14元 | |
| 【S32K3XX】核间通信MU使用被打赏¥27元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于3pin锂电池接口的介绍/使用被打赏¥16元 | |
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
我要赚赏金
