M32片内外设--DBG之Keil SWO输出

原始的资料,请参看Energymicro support上的文章。链接地址如下:

http://support.energymicro.com/entries/20294061-swo-printf-in-keil

 

1) 加入stdio.h,这样你就可以调用printf函数了

2) 使能SWO输出

使能SWO输出。最简单的办法就是将如下的函数拷贝到你的工程里面,并且在mian函数初始化之后调用该函数。

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;

/* Enable Serial wire output pin */

GPIO->ROUTE |= GPIO_ROUTE_SWOPEN;

#if defined(_EFM32_GIANT_FAMILY)

/* Set location 0 */

GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC0;

/* Enable output on pin - GPIO Port F, Pin 2 */

GPIO->P[5].MODEL &= ~(_GPIO_P_MODEL_MODE2_MASK);

GPIO->P[5].MODEL |= GPIO_P_MODEL_MODE2_PUSHPULL;

#else

/* Set location 1 */

GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC1;

/* Enable output on pin */

GPIO->P[2].MODEH &= ~(_GPIO_P_MODEH_MODE15_MASK);

GPIO->P[2].MODEH |= GPIO_P_MODEH_MODE15_PUSHPULL;

#endif

/* Enable debug clock AUXHFRCO */

CMU->OSCENCMD = CMU_OSCENCMD_AUXHFRCOEN;

while(!(CMU->STATUS & CMU_STATUS_AUXHFRCORDY));

/* Enable trace in core debug */

CoreDebug->DHCSR |= 1;

CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

/* Enable PC and IRQ sampling output */

*dwt_ctrl = 0x400113FF;

/* Set TPIU prescaler to 16. */

*tpiu_prescaler = 0xf;

/* Set protocol to NRZ */

*tpiu_protocol = 2;

/* Unlock ITM and output data */

ITM->LAR = 0xC5ACCE55;

ITM->TCR = 0x10009;

}

 

3) 配置Keil的工程选项

打开Keil的工程配置,选择Debug页面,选择仿真器为Cortex-M/R J-Link/J-Trace, 并点击仿真器选项边上的setting选项,打开具体的设置窗口。

在打开的窗口中,切换到Trace页面,选中Enable,并且设置Core Clock为14MHz,分频选项为Core Clock/16。详情如下:

 

4) 在初始化SWO函数之后的地方,使用printf函数进行输出。例如printf("Hello world")。

5) 在你的工程里面,需要添加如下的函数:

struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f) {
ITM_SendChar(ch);
return(ch);
}

 

6) 编译你的代码,并且进入Debug状态

7) 打开Keil的printf-view窗口, 通过 View -> Serial Windows -> Debug(printf) View

8) 点击运行之后,在Debug (printf) View里即可查看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值