STM32F401でLチカをする(LED点灯)

マイコン勉強の基本であるLチカをSTM32F401でやっていこうと思う。


プロジェクトを作成する

まずはSTM32CubeIDEでプロジェクトを作成する。
STM32CubeIDEを起動するとこのような画面が出る。


過去に起動して、チェックをいれたらこの画面は出てこない。

この画面では、作成したデータの保存先を決める画面になる。
保存先をデフォルトの設定から変えたいときは、「参照(B)」をクリックして保存先の変更を行っていく。

次に「起動(L)」をクリックして保存先の決定を行い、STM32CubeIDEを起動する。




初めて起動するとこの画面が出てくる。
出てこないときは「ヘルプ(H)」から「Infomation  Center」をクリックすれば出てくる。

「Start new STM32 project」をクリックする。
「ファイル(F)」→「新規(N)」→「STM32 project」でも大丈夫。



Target Selectionというページが開かれる。
「Board Selector」をクリックすると、STマイクロエレクトロニクスが出しているマイコンボードの一覧が出てくる。
ここから自分が使っているSTM32のマイコンボードを選択していく。
今回はSTM32F401-Nucleoというマイコンを使っているので「NUCLEO-F401RE」を選択する。
マイコンボードが違うときはマイコンボードに書かれている数字などをヒントに探してほしい。

選択したら、「次へ(N)」をクリックする。


この画面でプロジェクト名をつける。
オプションはデフォルトの設定で大丈夫。

「完了(F)」をクリックする。


ボードに関する設定をデフォルトの状態で初期化するか確認してくる。
今回は、「はい(Y)」をクリックする。


書かれていることが聞かれているが、問題ないので「はい(Y)」をクリックする。

CubeMXでピンの設定をする



プロジェクトを立ち上げると、この画面が出てくる。
この画面では、ボードに関するピンの設定を行うとこができる。
基本的に、この画面とソースコードを使用してSTM32マイコンボードの開発を行っていく。

初めてなので、マイコンに使われているLEDを点灯・点滅を行っていく。
デフォルトの設定で「PA5」が緑色になっている。
これはマイコンボードでこのピンをどう使うかが設定されているピンになる。
今回このピンは「LD2[GreenLed]」と書かれているので、これはマイコンボード上にあるLEDにピンがつながっていると書かれている。

他にもいろいろとつながっているが、初心者が設定を変えるとよくわからないバグを起こすので絶対に触らないようにする。

main.cでプログラムを書いていく

ピンの設定が終わったら、プロジェクト・エクスプローラーから「Core」→「Src」→「main.c」でソース画面を表示する。




ソース画面を見てみるとすでに、プログラムが書き込まれた状態で表示される。
これはCubeMXで設定したものが自動で生成されたものである。

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

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

  /*Configure GPIO pin : B1_Pin */
  GPIO_InitStruct.Pin = B1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(B1_GPIO_Port, &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);

}

このソースはCubeMXで設定したピンのコードになる。
これは、LEDにつながっているピンが出力ピンの設定になっていることが書かれたコードになる。

C言語でSTM32プログラムを書くときこのコードを書かなければならないが、CubeMXでピンの設定を行っていくと自動で生成されるので非常に便利である。

STM32には「LLライブラリ」と「HALライブラリ」というものがある。
「LLライブラリ」は昔にSTM32を使うときに使われたものらしい。
今は「HALライブラリ」と呼ばれるものが主流になっている。
この「HALライブラリ」はSTM32の型番ごとに異なるハードウェア機能を共通化の関数で簡単に使えるようにしたライブラリらしい。
STM32マイコンを使うための関数だという認識でいいと思う。
基本的に「HALライブラリ」のコードを使ってマイコンの制御を行うのが一番簡単である。ネットで得られる情報量もたくさんある。



C言語の記述する場所は基本的に決まっている。

/* USER CODE BEGIN なんとか */

/* USER CODE END なんとか */

「USER CODE BIGIN」から「USER CODE END」の間にプログラムを書いていく。
ここ以外の場所に書いてしまうと、CubeMXで設定を変更してピンに関するプログラムが自動生成されるときに書いておいたプログラムが削除されてしまう。気を付けておこう。


/  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); //LED点灯
   HAL_Delay(500); //500ms停止
   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET); //LED消灯
   HAL_Delay(500); //500ms停止
  }
  /* USER CODE END 3 */

LEDの点滅を行うプログラムを書いてみた。
HALライブラリはこのような感じでプログラムを書いていく。

GPIOAは「PA5」の「A」を意味している。
これが「PB5」であればGPIOBと書く。

GPIO_PIN_5はピンの番号を表している。「PA6」なら数字を「6」に変えればよい。

GPIO_PIN_SETとGPIO_PIN_RESETはHIGH(1)かLOW(0)を表している。

プログラムをボードに書き込む

プログラムを書き終えたらビルドして書き込んでいく。
ボードとパソコンをUSBでつないでおく。

ソース(S)下にあるハンマーマークをクリックする。
これをクリックするとビルドが開始される。

コンソール画面を確認すれば、ビルドが正常に完了したどうかを確認することが出来る。
エラーがあればそういった表示があるので確認してプログラムを書き直し再度ビルドを行う。

次にプロジェクト(P)下の虫マークをクリックする。
これはプログラムの書き込みとデバックを行うボタンになる。

起動構成プロパティーの編集

起動構成プロパティーの編集画面がでてくる。


この画面の「デバッガ」をクリックする。

デバッグプローブが「ST-LINK GDB server」にする。
インターフェースの「SWD」にチェックをつける。

「始動」をクリックする。


ランタイム・オプションの「Set breakpoint at」のチェックを外す。

これらの設定が終わったら「OK」をクリックする。

ファームウェアの更新

もしこの画面が出てきたらファームウェアの更新を行わなければならない。
出なければファームウェアの更新は読み飛ばしてもらって構わない。


画面の指示通りにUSBケーブルとマイコンを取り外し、再度装着する。
「はい(Y)」をクリックする。


「Open in update modeupdate mode」をクリックする。

「Upgrade」をクリックして、ファームウェアの更新を行う。

完了すると画面下「Upgrade successful」と表示がでる。
これがでたら、画面を閉じても大丈夫。

再度、虫マークをクリックする。

パースペクティブの切り替え

デフォルトの設定でデバッグを行っていくとこのような画面が出てくる。


「切り替え(S)」をクリックして大丈夫である。


これでSTM32へのプログラムの書き込み完了である。
STM32F401のマイコンボードにあるLEDが点滅されていることを確認することが出来ると思う。




STM32はCubeMXというGUIで基本コードを作成して、プログラムを書いていく流れになる。
マイコンボードは秋月電子などで購入することが出来る。
秋月電子→http://akizukidenshi.com/catalog/g/gM-07723/

STM32F401は「メモリ・サイズ/価格/動作時消費電力/性能においてバランスのとれたSTM32F4アクセス・ライン」とSTマイクロエレクトロニクスのホームページの製品ページに書かれている。
STM32マイコン購入の参考にしてください。

コメント

コメントを投稿

このブログの人気の投稿

STM32CubeIDEに日本語化プラグインを導入する

STM32F401-Nucleoでシリアル通信をやってみる