我手头上用的keil 5.0的开发环境,仿真调试器工具用的山寨ulink2。想利用仿真器打印printf的调试信息在开发环境的debug(printf) view窗口上。
#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
struct __FILE { int handle; /* Add whatever needed */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
}
打开keil\arm\startup\stm32dbg.ini文件,DBGMCU_CR的TRACE_IOEN位,需要在调试文件STM32DBG.INI中配置,默认是0,选为1即可。否则程序就会在while (ITM->PORT[0].u32 == 0);处死循环。
按照上述要求进行修改了,还是出现死循环的现象,暂时搁置到这里了,下次接着调吧
参考资料: