STM32CubeIDEでSWVデバッグ

投稿者: | 2019/11/02

STM32F103にプログラムを書き込んだり、デバッグするのにST-LINKを使用してます。Blue Pillボードは、書き込み/デバッグ用にVCC, GND,DIO,CLKの4ピンが用意されています。デバッグしているときにコンソールにprintfで出力したい時もありますよね? そんな時は、UARTやUSBからシリアルで出力したりとかしていますよね。
でも、ST-LINKに付いているSWOを使えば、printfでSTM32CubeIDEのコンソールに直接出力できます。
ただし、AliExpressなどで売っている¥200程度の中華版ST-LINKはSWOが無いため使えませんのでご注意を。ST純正デバッガST-LINKを使ってください。多分、DiscoveryボードなどについてるST-LINKでも使えると思います(未確認)。ST純正(の格好をしている?)デバッガST-LINK/V2も¥1,000以下で買えますので、それでも良いと思います。

  1. STM32F103C8T6の場合、SWOはPB3です。STM32CubeIDEのMXを使ってPB3ポートのプロパティをSYS_JTDO_TRACESWOにします。
    SWO

    PB3ポートをSYS_JTDO_TRACESWOに設定する

  2. メニューの「Debug Configuration…」を開き、以下の通り設定します。デバッグプローブ: ST-LINK GDB server
    インターフェース: SWD を選択し、シリアル ワイヤ ビューア(SWV)を有効にします。
    コアクロック:STM32F103C8T6のクロック周波数を設定します。(標準の8MHz XTALを使っていれば最高周波数は72MHzです)
    Debugger_setting
  3. デバッグを開始します
    SWV ITM Data Consoleを表示させます。
    Window → Show View → SWV → SWV ITM Data Console を選択し、デバッグウィンドウに SWV ITM Data Consoleを表示します。
  4. デバッグウィンドウのSWV ITM Data Console のタブを選んで、横にある設定アイコン(ドライバとスパナ)をクリックします。
    「ITM Stimulusポート」の「0」をチェックします。
    SWV_Setting
  5. デバッガでプログラムを実行する前に、
    SWV ITM Data Consoleタブを選んで横にある赤ボタンを押します。
    「実行する前」に赤ボタンを押さないとダメですよ。
    SWV_Print_example
  6. プログラム内のprintf()が実行され、SWV ITM Data consoleに出力されます。 上の例では、printf()の代わりにtiny_printf()を使用しています。
  7. FreeRTOSでは、標準のprintf()はメモリの消費が大きいためか、正常に動作しませんでした。FreeRTOSにポーティングされた printf-stdarg.c のtiny_printf()を使いました。
    SWOから出力させるように、vOutputChar()にITM_SendChar(cChar);を追加します。

 

この関数も自前で作る必要があります。
コメントに書いてあるように、読み出しできるアドレスは「1」を、書き込みできるアドレスは「2」を、読み書きできるアドレスの場合は「3」を返すようにします。

これで、STM32CubeIDEのコンソールに文字や変数値を出力できるようになり、デバッグにとても便利です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください