八层楼 发表于 2025-8-12 17:05

ITM_SendChar函数的使用

ITM_SendChar 是 ARM Cortex-M 微控制器中用于通过 ​​ITM(Instrumentation Trace Macrocell)机制​​输出调试信息的关键函数,它通过 SWO(Serial Wire Output)引脚实现高速、低干扰的调试信息传输,尤其适合替代传统串口输出。以下是详细使用指南:


​​一、ITM_SendChar 的原理与优势​​
​​工作原理​​

ITM 是 Cortex-M3/M4/M7 内核内置的调试模块,支持 32 个刺激端口(Stimulus Ports)。
ITM_SendChar 将字符写入 ITM 的端口 0(默认端口),通过 SWO 引脚输出到调试器(如 J-Link、ST-Link)。
​​无需暂停程序​​:数据在程序全速运行时异步传输,不影响实时性。
​​核心优势​​

​​高速传输​​:波特率可达数 Mbps(取决于内核时钟)。
​​零硬件占用​​:仅需 1 根 SWO 引脚(通常为 PB3),不占用串口资源。
​​支持标准库函数​​:可重定向 printf 直接输出调试信息。

​​二、硬件连接要求​​
​​引脚连接​​

​​目标板​​:连接 MCU 的 ​​SWO 引脚(PB3)​​ 到调试器的 ​​SWO 接口​​(调试器 20 针接口的第 9 脚)。
​​调试器​​:使用支持 SWO 的调试器(如 ST-Link V2/V3、J-Link)。
​​接线示例​​:
MCU PB3 → 调试器 SWO 引脚
MCU SWDIO → 调试器 SWDIO
MCU SWCLK → 调试器 SWCLK
GND → GND


​​注意事项​​

​​Cortex-M0/M0+ 不支持​​:仅 M3/M4/M7 内核可用。
​​时钟匹配​​:调试器配置的 CPU 时钟必须与实际频率一致(否则无输出)。

​​三、软件配置步骤​​
1. ​​工程设置(以 Keil MDK 为例)​​
​​启用 Trace​​:
Options for Target → Debug → Settings → Trace
勾选 ​​Enable Trace​​,设置 ​​Core Clock​​(如 168 MHz),选择 ​​ITM Stimulus Port 0​​(默认端口)。
​​SWO 参数​​:
Trace Port: Serial Wire Output,Prescaler 根据时钟计算(如 168 MHz 时设为 2)。
2. ​​代码重定向​​
重写 fputc 函数,调用 ITM_SendChar:
#include <stdio.h>
#include "core_cm4.h"// 根据内核选择 core_cm3.h 或 cm4.h

// 重定向 printf
int fputc(int ch, FILE *f) {
    return ITM_SendChar(ch);// 发送字符到 ITM 端口 0
}


​​多端口支持​​:
若需使用其他端口(如端口 1),修改为:
#define ITM_PORT1 0x00000001
ITM->PORT.u8 = ch;// 发送到端口 1


3. ​​测试代码​​
int main(void) {
    while (1) {
      printf("ADC Value: %d\n", read_adc());// 直接使用 printf
      delay_ms(100);
    }
}

​​四、调试信息查看​​

​​Keil MDK​​

进入调试模式:Debug → Start/Stop Debug Session。
打开输出窗口:View → Serial Windows → Debug (printf) Viewer。
​​其他工具​​

​​ST-Link Utility​​:SWV → Serial Wire Viewer。
​​J-Link SWO Viewer​​:独立工具,支持波形显示。

​​五、常见问题解决​​
​​无输出信息​​

​​时钟不匹配​​:检查调试器中设置的 Core Clock 是否与实际一致。
​​SWO 引脚未启用​​:在 MCU 初始化代码中启用 PB3 的复用功能(部分需配置 GPIO)。
​​端口未使能​​:在 Keil Trace 配置中勾选 ​​ITM Stimulus Port 0​​。
​​输出乱码​​

​​波特率错误​​:调整 Prescaler 值(公式:SWO 频率 = Core Clock / (Prescaler + 1))。
​​中断冲突​​:避免在中断服务函数中频繁调用 printf(改用缓冲队列)。

​​六、高级用法​​
​​多端口分类输出​​

void debug_log(uint8_t port, char *msg) {
    while (*msg) {
      ITM->PORT.u8 = *msg++;// 指定端口发送
    }
}


​​应用场景​​:端口 0 输出日志,端口 1 输出错误信息,便于过滤。
​​2.与 RTT 对比​​

data:image/png;base64,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


​​七、最佳实践建议​​
​​替代串口调试​​:在资源受限或高速场景下优先使用 ITM,节省硬件串口。
​​时钟校准​​:在 SystemInit() 后读取 SystemCoreClock 动态设置 Trace 时钟。
​​生产环境禁用​​:通过宏定义控制调试输出,避免性能损耗:
#ifdef DEBUG_ENABLE
#define LOG printf
#else
#define LOG(...)
#endif


————————————————
版权声明:本文为CSDN博主「风停了123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2301_79036162/article/details/148892846

页: [1]
查看完整版本: ITM_SendChar函数的使用