你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 的ITM、DWT功能实现

[复制链接]
STMCU小助手 发布时间:2022-1-20 21:39
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.实现代码如下:
  1. 1 //寄存器基地址
  2. 2 #define    DWT_CR    *(uint32_t*)0xE0001000
  3. 3 #define    DWT_CYCCNT    *(uint32_t*)0xE0001004
  4. 4 #define    DEM_CR    *(uint32_t*)0xE000EDFC
  5. 5
  6. 6 //定义需使能位
  7. 7 #define    DEM_CR_TRCENA    (1<<24)
  8. 8 #define    DWT_CR_CYCCNTENA    (1<<0)
  9. 9
  10. 10 //DWT init
  11. 11 void DWT_init(void)
  12. 12 {
  13. 13     DEM_CR |= (uint32_t)DEM_CR_TRCENA;
  14. 14     DWT_CYCCNT = (uint32_t)0u;
  15. 15     DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;
  16. 16 }
  17. 17 //get DWT count
  18. 18 uint32_t DWT_TS_GET(void)
  19. 19 {
  20. 20     return((uint32_t)DWT_CYCCNT);
  21. 21 }
复制代码

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

  7.功能窗口:
     可使用以下两种方式查看打印信息:
    a.使用keil debug功能。
1267849-20171126185018562-22639448.png

1267849-20171126185237281-1353937360.png   
    

收藏 评论0 发布时间:2022-1-20 21:39

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版