在Keil环境下使用JLink/ST-Link实现printf输出重定向至debug窗口

本文详细介绍了如何在Cortex-M设备上使用Debug(printf)Viewer进行跟踪调试。通过定义ITM Port寄存器并添加fputc函数,使printf能够输出消息。设置ITM Port 0捕获信息,并在User模式下清除Port 7..0特权位,以访问ITM Port 0。最后,在MDK中打开Debug(printf)Viewer窗口查看数据流。

Debug (printf) Viewer

 

The Debug (printf) Viewer window displays data streams that are transmitted sequentially through the ITM Stimulus Port 0. Enable ITM Stimulus Port 0.

Debug Viewer Window

To use the Debug (printf) Viewer for tracing:

  1. Add ITM Port register definitions to your source code.
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000
2. Add an fputc function to your source code that writes to the ITM Port 0 register. The fputc function enables printf to output messages.
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f) {
  if (DEMCR & TRCENA) {
    while (ITM_Port32(0) == 0);
    ITM_Port8(0) = ch;
  }
  return(ch);
}
3. Add your debugging trace messages to your source code using  printf.
printf("AD value = 0x%04X\r\n", AD_value);

4. Set the ITM Port 0 to capture the information. Clear the Port 7..0 privilege bit to access ITM Port 0 from User mode.

ITM Stimulus Port 0

5. Open the View - Serial Windows - Debug (printf) Viewer window.

Note

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值