LoginSignup
3
2

More than 5 years have passed since last update.

Nucleo-F303K8でprintfを使う

Last updated at Posted at 2018-09-29

目的

SW4STM32(System Workbench for STM32)にてARMセミホスティング機能を用いてprintfが利用可能な環境を整えます。

環境

項目 内容
OS Windows 10 Home 64bit
開発環境 SW4STM32, eclipse cdt oxygen, STM32CubeMX
ボード Nucleo-F303K8

手順概要

  1. STM32CubeMX設定
  2. eclipse リンカ設定
  3. eclipse コード修正
  4. eclipse デバッガ設定

STM32CubeMX設定

  • "New Project"から開発対象ボードを選択し(私の場合はNucleo-F303K8)て新規プロジェクトを生成します。
  • "Pinout"タブから"SYS"の"Debug"部分にて"Serial Wire"を選択します。

1.png

  • "Project"->"Settings"にてプロジェクト名(printf_test)と、プロジェクト生成先開発環境"SW4STM32"を選択します。
    2.png

  • "Project"->"Generate Code"でSW4STM32プロジェクトを生成します。

eclipse リンカ設定

ここではリンクオプションでセミホスティングを有効にします。

  • "File"->"Import"->"General"->"Existing Projects into Workspace"でCubeMXで生成したプロジェクトを読み込みます。

3.png

  • eclipse画面の左側のProject Explorerから"printf_test"プロジェクトを選択して、Alt+Enter (もしくは、右クリック->"Properties")で設定画面を開きます。

  • "MCU GCC Linker"->"Miscellaneous"にて, Linker flagsに"-specs=nosys.specs -specs=nano.specs -specs=rdimon.specs -lc -lrdimon"と入力します

image.png

  • "printf_test"を選択後、右クリックして"Build Configurations"->"Build All"で再度ファームウェアをビルドします。 image.png

通常の"Build"コマンドでは、セミホスティングを有効化する上記設定は反映されません。必ず"Build All"コマンドでビルドしてください

eclipse コード修正

"main.c"ファイルを開いてコードを以下のように修正します。

  • USER CODE 0に以下の文を追加します。(main関数の外側)
/* USER CODE BEGIN 0 */
extern void initialise_monitor_handles(void);
/* USER CODE END 0 */
  • USER CODE 1に以下の文を追加します。(main関数内側)
/* USER CODE BEGIN 1 */
initialise_monitor_handles();
int count = 0;
/* USER CODE END 1 */
  • USER CODE 3に以下の文を追加します。(while loop内側)
 /* USER CODE BEGIN 3 */
      printf("Count %d\n", count);
      count++;
      HAL_Delay(1000);
  }
  /* USER CODE END 3 */

1000msec毎に数値がカウントアップされてprintfにて表示されるプログラムです。

改行文字"\n"がないと表示されないので忘れずに入れてください


デバッガ設定でセミホスティングを有効にします。

  • 虫マークをクリックした後、ポップアップウィンドウで"Ac6 STM32 C/C++ Application"を選択します。

image.png

  • いったん停止ボタンを押します。

  • 虫ボタン横の下三角マークをクリックして、"Debug Configurations"を選択します。

  • "Startup"のInitialization Commandsの欄に"monitor arm semihosting enable"と記入します。

image.png

  • "Apply"ボタンを押した後、"Debug"ボタンを押します。

  • プログラムにエラーがなければ、そのままデバッグが開始されてmain関数内で一時停止します。

  • その後"Resume"ボタンを押すとプログラムの実行を進められます。

image.png

  • 以下のように、"Console"に1sec毎にカウントアップして数字が表示されると成功です。

image.png

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2