STM32 的ITM、DWT功能實現


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 //寄存器基地址
 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 init
11 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 count
18 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.代碼實現:

  
 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功能。

    

    
    b.使用J-link SWO Viewer。

      打開J-link SWO Viewer工具,選擇相應的芯片型號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM