Troubleshooting

DEFMT の出力がない

DEFMT_LOG フィルターを確認してください:

重大度が低い順から高い順のフィルターレベルは、TRACEDEBUGINFOWARNERROR です

DEFMT のフィルタリングレベルの詳細はこちら

これは複数の方法で設定できます:

  • probe-rs ベースの runner で cargo run を使用している場合:
    • ビルド時の ENV VAR: DEFMT_LOG=trace cargo build ...
    • .cargo/config.toml 内。注: cargo には、再ビルド時に変更を自動的に認識しないバグがあります。
      [env]
      DEFMT_LOG = "trace"
  • VSCode プラグインを使用している場合、
    • rttEnabledtrue になっており、consoleLogLevel が適切なフィルターレベルに設定されていることを確認してください:
      {
      "version": "0.2.0",
      "configurations": [{
      // 省略...
      "coreConfigs": [{
      // 省略 ...,
      "rttEnabled": true
      }],
      "consoleLogLevel": "Console", //Console, Info, Debug
      }],
      }

memory.x ファイルが正しいことを確認してください:

  • origin オフセットがデータシート/アプリケーションに従って正しいことを確認してください
  • 長さがデータシート/アプリケーションに従って正しいことを確認してください
  • 注: RAM の値を低くするのは問題ありませんが、チップの仕様を超える値にするとクラッシュし、RTT が接続できなくなります。

正しい Chip が選択されていることを確認してください:

  • .cargo/config.tomlrunner。例:
    runner = "probe-rs run --chip STM32L451RCTx"
  • VSCode プラグインを launch.jsonconfigurations/chip で使用している場合
    {
    "version": "0.2.0",
    "configurations": [{
    // 省略...
    "chip": "STM32L451RCTx",
    // 省略...
    }],
    }

コード内で defmt_rtt が「使用」されていることを確認してください:

そうでない場合、コンパイル時にリンクされません。例:

use defmt_rtt as _;

STM32 シリーズのチップでは、BOOT0 ピンの状態を確認してください:

  • BOOT0 が HIGH またはフローティングの場合、コアは書き込まれたファームウェアではなく内部ブートローダーから実行されます。
  • SWD プログラミングのために BOOT0 は LOW にプルされている必要があります。ただし、HIGH またはフローティングでも書き込みが成功したように見えることがありますが、ファームウェアは正しく実行されません。

ツール類が最新であることを確認してください:

活発に開発・改善されているあらゆるツール群と同様に、一部が更新されて破壊的変更が入った場合、動作させるには他のツールも更新する必要があることがあります。