KEIL MDK 中使用DEBUG_VIEWER
#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 you need here */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f)
{
#ifdef DEBUGVIEWER //使用DEBUG_VIEWER
if (DEMCR & TRCENA)
{
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
#else //使用Usart 输出Printf
HAL_UART_Transmit(&huart2,(uint8_t*)&ch,1,0xFFFF);
return (ch);
#endif
}
使用山外多功能调试助手的虚拟示波器
数据传输格式为0x03 0xFC .....0x03 0xFC
#define CMD_WARE 0x03
void Putbuff(UART_HandleTypeDef *huart,uint8_t *buff,uint32_t len)
{
while(len--)
{
HAL_UART_Transmit(huart,(uint8_t*)buff,1,0xFF);
buff++;
}
}
void SendData(void* dat,uint16_t size)
{
uint8_t cmdf[2] = {CMD_WARE, ~CMD_WARE};
uint8_t cmdr[2] = {~CMD_WARE, CMD_WARE};
Putbuff(&huart2, cmdf, sizeof(cmdf));
Putbuff(&huart2, (uint8_t *)dat, size);
Putbuff(&huart2, cmdr, sizeof(cmdr));
}