/STM32CubeIDEでprintf【Semihosting編】2019.05.28STM32CubeIDEでprintf【Semihosting編】TweetSTM32CubeIDEでSemihostingを使ってprintfを使う方法を解説します。下記の画像をご覧になってください。Semihostingを使うことでデバッグコンソールにprintf出力ができるようになります。UARTの線も使わないので省配線にもなるというメリットもあり、デバッグ作業がとても便利になります。速度は遅く処理の邪魔になりやすい点には注意してください。以降では具体的にSemihostingでprintfをするための方法を解説していきます。今回は下記の環境を前提に話を進めます。STLinkはNUCLEO-F401REに実装されているものをそのまま使いました。ver.1.00NUCLEO-F401RE2.printf用のプロジェクトの準備2-1.プロジェクトの作成まずは適当にプロジェクトを作成してください。Tool(CubeMX)で特別な設定は必要ありません。2-2.syscall.cの無効化Semihostingを使う場合はsyscall.cが競合してしまうので無効化しておきましょう。続いてリンカの設定を行います。ライブラリの追加です。(-l)の『+ボタン』から『rdimon』を追加してください次にライブラリの有効化の設定をします。flagsの『+ボタン』から『-specs=rdimon.specs』を追加してください3.printf用のコードを追加3-1.printfの初期化printfを使う前に初期化コードを入れておく必要があります。下記のように追加します。*/UARTを使った方法とは違い、setbuf()ではないことに注意してください。実際にprintfを追加してみましょう。World!!』するだけのプログラムにしました。*/4.デバッグの設定このプロジェクト用のデバッグ設定を作成します。(OpenOCD)』を選択してください続いて、このデバッグでSemihostingを使うための設定を追加します。enable』を追加してください5.デバッグの実行ここまでで準備は完了です。最後にDebugボタンを押してデバッグを実行してみましょう。デバッグコンソールに出力されましたね!お疲れ様でした!6.おわりに本記事ではSTM32CubeIDEでSemihostingを使ってprintfを実現する方法をご紹介しました。Semihostingを使うことで、UARTの線を使うことなくprintfが使えるようになります。出力はデバッグコンソールに行われるため、使い勝手は良いと思います。通信速度はあまり速くありません。printfの使用頻度が少なく、printfをしても処理への影響が小さい時には便利な方法かと思います。関連:STM32CubeIDEでprintf【SWO編】Tweet開発環境STM32CubeIDESNSでもご購読できます。名前:ゆっき連絡:『お問い合わせ』、もしくは『Twitter』からお気軽にどうぞ。