1) 加入stdio.h,這樣你就可以調(diào)用printf函數(shù)了
2) 使能SWO輸出 使能SWO輸出。最簡(jiǎn)單的辦法就是將如下的函數(shù)拷貝到你的工程里面,并且在mian函數(shù)初始化之后調(diào)用該函數(shù)。 void setupSWO(void) { uint32_t *dwt_ctrl = (uint32_t *) 0xE0001000; uint32_t *tpiu_prescaler = (uint32_t *) 0xE0040010; uint32_t *tpiu_protocol = (uint32_t *) 0xE00400F0; CMU->HFPERCLKEN0 |= CMU_HFPERCLKEN0_GPIO; GPIO->ROUTE |= GPIO_ROUTE_SWOPEN; #if defined(_EFM32_GIANT_FAMILY) GPIO->ROUTE = (GPIO->ROUTE &~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC0; GPIO->P[5].MODEL &= ~(_GPIO_P_MODEL_MODE2_MASK); GPIO->P[5].MODEL |= GPIO_P_MODEL_MODE2_PUSHPULL; #else GPIO->ROUTE = (GPIO->ROUTE &~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC1; GPIO->P[2].MODEH &= ~(_GPIO_P_MODEH_MODE15_MASK); GPIO->P[2].MODEH |= GPIO_P_MODEH_MODE15_PUSHPULL; #endif CMU->OSCENCMD = CMU_OSCENCMD_AUXHFRCOEN; while(!(CMU->STATUS & CMU_STATUS_AUXHFRCORDY)); CoreDebug->DHCSR |= 1; CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; *dwt_ctrl = 0x400113FF; *tpiu_prescaler = 0xf; *tpiu_protocol = 2; ITM->LAR = 0xC5ACCE55; ITM->TCR = 0x10009; } 3) 配置Keil的工程選項(xiàng) 打開(kāi)Keil的工程配置,選擇Debug頁(yè)面,選擇仿真器為Cortex-M/R J-Link/J-Trace,并點(diǎn)擊仿真器選項(xiàng)邊上的setting選項(xiàng),打開(kāi)具體的設(shè)置窗口。 在打開(kāi)的窗口中,切換到Trace頁(yè)面,選中Enable,并且設(shè)置Core Clock為14MHz,分頻選項(xiàng)為CoreClock/16。詳情如下: 
4) 在初始化SWO函數(shù)之后的地方,使用printf函數(shù)進(jìn)行輸出。例如printf("Hello world")。 5) 在你的工程里面,需要添加如下的函數(shù): struct __FILE { int handle; };
FILE __stdout;
FILE __stdin; int fputc(int ch, FILE *f) {
ITM_SendChar(ch);
return(ch);
} 6) 編譯你的代碼,并且進(jìn)入Debug狀態(tài) 7) 打開(kāi)Keil的printf-view窗口, 通過(guò) View -> Serial Windows ->Debug(printf) View 8) 點(diǎn)擊運(yùn)行之后,在Debug (printf) View里即可查看 
|