STM32マイコンNUCLEO-F302R8をLチカ

NUCLEO-F302R8をLチカするまでの作業をまとめした。

このボードは、ブラシレスモータ制御用として、結構、有名です。下写真とX-NUCLEO-IHM07(青い基板)というドライバとセットで、ブラシレスモータを動かせます。

この記事では、実際にモータ制御を実装する前段階として、開発環境をインストールして、NUCLEO-F302R8をLチカするまでを目標にしてます。

ST32MCubeIDE

STマイクロエレクトロニクスが開発したEclipseベースの統合開発環境です。初回リリースが2014年と比較的?新しく、現在(2023.2)のバージョンは1.11.2です。

https://www.st.com/ja/development-tools/stm32cubeide.html

元々、初期コード生成(使用するボードor マイコンを選択して、GUIからベースとなるプロジェクトを作成する機能はSTM32CubeMXというソフトが受けもってたらしいですが、ST32CubeIDEでこれらの機能が統合されました。

資料

資料をまとめておきます。回路図。

リファレンスマニュアル

https://tekuteku-embedded.xyz/wp-content/uploads/2023/02/rm0365-stm32f302xbcde-and-stm32f302x68-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

ボードピンアサイン

HAL(hardware abstraction layer)

STM32にはHALライブラリというのがあって、マイコンのレジスタをいちいち直打ちしないでも、プログラムが作成できます。

https://tekuteku-embedded.xyz/wp-content/uploads/2023/02/STM32F4_HAL.pdf

ただ、説明書が不親切だ、結局、リファレンスマニュアルみないと使いこなせないじゃんみたいな悪評がたってるみたいです。ただ、自分がよく使ってるNXPマイコンでも似たようなもんなので、そんなものかもしれません。

プロジェクト作成

STM32CubeIDEを起動します。Workspaceの場所を設定して、LAUNCHボタンを押します。

File->New->STM32 Projectをクリックして、プロジェクトを新規作成します。

Target Selection画面でBoard Selectorタブをクリックして、ボード名”Nucleo-F302R8″と入力します。Listにボードが表示されるので、選択して、Nextで次に進みます。

プロジェクト名を入力して、Finishを押します。

Yesで進みます。

すると下のような画面が表示されます。

このPinout&Configurationの画面から、使用するピンの割り当てを行い、コードを生成することができます。グレーになっているピンを左クリックすると、任意の機能を割り当てることができます。今回はLD2をLチカするので、PB13をGPIO_Outputに割り当てます。下の回路図から、LD2はPB13とつながってるのが分かります。

リストからGPIO_Outputを選択。

右クリックして、Enter User Labelでピン名を設定できます。

LD2という名前をつけました。

Project -> Generate Codeでコード生成します。

生成されたコードは左側のProject Explorerに格納されます。main.cは、Core->Srcにあります。

コード生成前後で比較したmain.cです。左がLD2ピンを有効化したものです。

下のコードで、LD2ピンのデジタル出力をLOWにします。

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);

逆にHIGHにする場合は、下のコードを使います。

  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);

HAL_GPIO_Initでデジタル出力の初期設定をします。GPIO_InitStructという構造体に設定もろもろを格納します。

  /*Configure GPIO pin : LD2_Pin */
  GPIO_InitStruct.Pin = LD2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);

Pin:設定するピン番号、Mode:プッシュプルかオープンドレインかを選択、Pullアップ/ダウンあるいはなしかを選択、Speed:出力周波数(Lowだと~2MHz)を選択

main.cのint main(void)内のメインループに下のようなコードを足します。

  while (1)
  {
	  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
	  HAL_Delay(1000);
	  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
	  HAL_Delay(1000);
  }

Lチカのための待機時間は、下のようにします。これで1sec待つことができます。

HAL_Delay(1000);

F11を押して、ビルド&書き込みを実行します。下が実際の動作画面です。無事1秒おきにLEDが点滅してます。

別の方法として、TIM6でLチカする方法は、下の記事で紹介してます。

STM32 タイマー割り込みをつかう(HAL)

以上です。Nucleo Lチカばんざい。

コメントを残す

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

Social Share Buttons and Icons powered by Ultimatelysocial