你的位置:首页 > 软件开发 > 操作系统 > STM32 的ITM、DWT功能实现

STM32 的ITM、DWT功能实现

发布时间:2017-11-26 04:00:09
I.STM32 DWT时间戳功能实现  1.m3、m4实测可用。   2.精度:1/内核频率(s)。   3.实现流程:     a.先使能DWT外设,由内核调试寄存器DEM_CR的位24控制,写1使能。     b.使能CYCCNT寄存器之前,先清0。     c.使能C ...

I.STM32 DWT时间戳功能实现
  1.m3、m4实测可用。
  2.精度:1/内核频率(s)。
  3.实现流程:
    a.先使能DWT外设,由内核调试寄存器DEM_CR的位24控制,写1使能。
    b.使能CYCCNT寄存器之前,先清0。
    c.使能CYCCNT寄存器,由DWT_CTRL的位0控制,写1使能。
  4.实现代码如下:

    STM32 的ITM、DWT功能实现STM32 的ITM、DWT功能实现
 1 //寄存器基地址 2 #define DWT_CR *(uint32_t*)0xE0001000 3 #define DWT_CYCCNT *(uint32_t*)0xE0001004 4 #define DEM_CR *(uint32_t*)0xE000EDFC 5  6 //定义需使能位 7 #define DEM_CR_TRCENA (1<<24) 8 #define DWT_CR_CYCCNTENA (1<<0) 9 10 //DWT init11 void DWT_init(void)12 {13  DEM_CR |= (uint32_t)DEM_CR_TRCENA;14  DWT_CYCCNT = (uint32_t)0u;15  DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;16 }17 //get DWT count18 uint32_t DWT_TS_GET(void)19 {20  return((uint32_t)DWT_CYCCNT);21 }
DWT

  5.使用场景:
    a.可用来实现延时功能。
    b.测量程序运行时间。
    c.。。。。。

II.STM32 ITM调试功能实现

  1.概念:ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统和应用事件,
  并发布判定的系统信息。ITM以包的形式发布跟踪信息。
  2.实际应用:当调试时需要打印出信息,而又不能占用串口时,ITM就派上用场了。
  3.m3、m4实测可用。
  4.配置步骤:
    a.配置TPIU并使能I/IO_TRACEN以使能TRACE的引脚
    b.向Trace Lock Access寄存器写入0xC5ACCE55,以允许写其他ITM寄存器
    c.向Trace Control寄存器写入0x00010005,使能TPIU的同步包并使能整个ITM功能,
    寄存器中的ATB ID为0x01
    d.向ITM Trace Enable寄存器写入0x01,以使能触发端口0
    e.向ITM Trace Privilege寄存器写入0x01,关闭对触发端口7:0的屏蔽
    f.把需要输出的值写入触发端口0寄存器,这个步骤可以通过软件完成(使用printf功能)
  5.注意事项:
    a.只能使用SWD方式调试
    b.需要使用到TRACESWO引脚,正常为PB3
  6.代码实现:

  STM32 的ITM、DWT功能实现STM32 的ITM、DWT功能实现
 1 int main(void) 2 { 3  int dat = 0; 4     5  DBGMCU->CR = 0x27;//使能TRACE的引脚 6  ITM->LAR = 0xC5ACCE55;//允许写其他ITM寄存器 7  ITM->TCR = 0x00010005; //使能TPIU的同步包并使能整个ITM功能 8  ITM->TER = 0x01;//以使能触发端口0 9  ITM->TPR = 0x01;//关闭对触发端口7:0的屏蔽10  ITM_RxBuffer = 0x5AA55AA5;//如果不需要scanf功能可屏蔽掉11    12  printf("input data");13  for(;;)14  {15   scanf("%s",&dat);16  if(dat)17  {18   ptintf("your input is %d\n",dat);19   dat = 0;20  }21  }22 }23   24 //重定义printf功能25 int fputc(int ch,FILE *f)26 {27  return ITM_SendChar(ch);28 }29 //重定义scanf功能30 int fgetc(FILE *f)31 {32  while(ITM_CheckChar() != 1) __NOP();33  return (ITM_ReceiveChar());34 }35   
ITM

  7.功能窗口:

     可使用以下两种方式查看打印信息:
    a.使用keil debug功能。

    STM32 的ITM、DWT功能实现

    STM32 的ITM、DWT功能实现
    b.使用J-link SWO Viewer。

      打开J-link SWO Viewer工具,选择相应的芯片型号。

原标题:STM32 的ITM、DWT功能实现

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录