STM32開發,通過SWO功能輸出Printf函數到Utility

1 概述

1.1 資源概述

開發板:ST官方NUCLEO-F103RB開發板
CUBEMX版本:1.3.0
MDK版本:5.23
主控芯片型號:STM32F103RBT6
NUCLEO_F103RB開發板

1.2 SWO功能簡介

SWO也叫做trace(跟蹤)功能,通過此功能,只需要在SWD調試基礎上增加一條SWO線纜,就可以實現類似串口輸出功能,配合printf函數打印相應的信息到utility窗口中。此功能不佔用串口資源,無需在中斷中執行。

1.3 ITM(指令跟蹤微單元)簡介

我們此次功能實現是通過調用ITM實現的。
ITM是一應用驅動的跟蹤源,它支持printf類的調試手段來跟蹤操作系統(OS)和應用事件,併發布判定的系統信息。ITM以包的形式發佈跟蹤信息,它由以下部分組成:
● 軟件跟蹤:軟件可以通過直接寫ITM激發寄存器來發布包信息。
● 硬件跟蹤:ITM會發布由DWT產生的信息包。
● 時間戳:時間戳被髮布到相應的包上。ITM包含一個21位的計數器以產生時間戳。Cortex-M3的時鐘或串行線觀測器(Serial Wire Viewer)的位時鐘率給計數器提供時鐘。
由ITM發送的信息包輸出到TPIU(Trace Port Interface Unit),TPIU再添加一些額外的包(參考TPIU),然後輸出完整的包序列給調試器。1

1.4 實現功能

本次程序實現的功能如下
1、復位後,向Serial Wire Viewer(utility)打印信息;
2、按按鍵BUTTON,LED2燈實現翻轉;
對於第二條實現,此次文檔不詳細描述。

2 硬件連接以及CUBEMX配置

2.1 硬件連接

開發板內部已經將線接好,如下圖所示
STLINK連接線
對於目標板與STLINK仿真器分開的情況,我們需要使用5根線進行連接,如下表所示。

序號 連接網絡 備註
1 VCC 電源正,3.3V
2 GND 電源負
3 SWO SW跟蹤功能
4 SWDIO SW數據輸入輸出
5 SWCLK SW時鐘信號

2.2 CUBEMX配置

選擇異步跟蹤模式,此時PB3將會自動定義爲SWO端口。
在這裏插入圖片描述

3 軟件開發

3.1 KEIL軟件設置

KEIL軟件設置如下,這裏由於程序使用的內部HSI,系統頻率是64MHz,因此填寫64MHz,需要根據實際情況進行填寫。
KEIL軟件設置

3.2 程序設計

使用CUBEMX生成代碼。在主函數中進行修改。
主程序中包含stdio.h函數的頭文件,否則將不能識別printf函數。

#include "stdio.h"

fputc 函數宏定義。

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

函數定義,由於printf調用的是fputc函數,通過這麼一個轉換,printf函數就能調用ITM函數實現輸出功能。

PUTCHAR_PROTOTYPE
{
  ITM_SendChar(ch);
  return ch;
}

TIM_Sendchar()函數在core.cm3.h頭文件中有進行定義,如下所述

__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)
{
  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */
      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */
  {
    while (ITM->PORT[0U].u32 == 0UL)
    {
      __NOP();
    }
    ITM->PORT[0U].u8 = (uint8_t)ch;
  }
  return (ch);
}

在主函數main()中增加printf函數,實現輸出。

 printf("** Test finished successfully. ** \n\r");

4 實驗結果與總結

4.1 實驗結果

打開utility軟件,點擊printf via SWO viewer。
utility軟件
設置頻率,點擊Start,將調試板復位(程序設置只運行一次printf,因此每輸出一次均需要重新復位),即可發現SWV窗口輸出了相應的信息。
調試窗口

4.2 總結

在傳統的調試中,我們可能偏向於斷點分析或者LED燈的亮滅來判定程序運行狀態,但是都不是太直觀,對於程序越大越不好操作。使用這個SWO功能能很大程序解決這個問題。我們可以在各種錯誤處理函數增加相應的提示信息,協助我們進行軟件開發工作。
錯誤處理信息提示機制


  1. STM中文參考手冊V10 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章