STM32 ゼロから始めるローパワーマイコン デバッガーでLチカ 後編

STM32 ゼロから始めるローパワーマイコン デバッガーでLチカ 後編

皆さま こんにちは。

前回に続いて、今回はデバッガー(STM32CubeIDE)を使ってLチカさせてみます。

投稿時の開発環境を記しておきます。

PC:Windows10 OS
IDE: STM32CubeIDE Version1.3.0
Configurator: STM32CubeMX Version5.6.0
マイコン: STM32L010F4P6
Board: 自作のボード

構成と接続を確認する

全体の構成は以下のようになります。

てづくりボードとNucleoボード間の接続は以下のとおりです。

配線や接続に誤りがないか、ご確認ください。

また、NucleoボードのCN2のジャンパービンをはすしておいてください。

コーディングと注意点

main.c の main()関数内の MX_GPIO_Init(); の後に以下のコードを書き足します。

  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_Delay(1000);
	  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

コーディングの際の注意点についてお話しておきます。
私たちが追加するコードは、
/* USER CODE BEGIN xxx */ と /* USER CODE END xxx */ の間に書くように習慣づけてください。

上の例では

/* USER CODE BEGIN 2 */ と /* USER CODE END 2 */ の間と
/* USER CODE BEGIN WHILE */ と /* USER CODE END WHILE */ の間にコードを追加しました。

設定を変更してビルドする際に「Do you want generate Code? 」と聞いてきて Yes を選択するとコード生成ツール(コンフィグレーター)がコードを自動生成してくれます。
この時に、当然ファイルを編集するわけですが、そうすると私たちが編集したコードも上書きされてしまう可能性が出てきます。

コメント文の BEGET xxx と END xxx ではさまれた部分に私たちが追加するコードを書いておけば、コンフィグレーターはその部分を触らないというルールがありますので覚えておいてください。

ビルドする

メニューの Project – Build All を選択してエラーがないことを確認します。

続いてメニューの Run – Debug を選択します。

プログラムが動き始めて、 HAL_Init()のところで停止します。

ここまで無事に動いたでしょうか?動かない場合には配線や接続を確認しなおしてみてください。

Run を選択すると、以下のサブメニューが出てきます。

プログラムを1行ずつ実行するためのステップ実行のコマンドは以下の2通りがあります。
Intoの方は関数があると、その内部まで入っていき実行します。
Overは関数があるとその中の実行は省略されます。

F5 : Step Into
F6 : Step Over

ここでは Step Over の方を使ってみます。

F6キーを1回押してみてください。
HAL_Init()を実行し終えて、SystemClock_Config()の行で停止します。

もう一度F6キーを押すと、MX_GPIO_Init()の行で停止します。
そしてもう一度F6キーを押すと、HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);の行で停止します。

この関数は指定したGPIOポートに値を書くものです。
回路図を見るとPB1にLEDが接続されています。
第1引数にポート名、第2引数にポート番号を指定して第3引数に GPIO_PIN_SET または GPIO_PIN_RESET を指定します。

GPIO_PIN_SET を指定すると 1 を出力するので、LEDは消灯します。
GPIO_PIN_SET を指定すると 0 を出力するので、LEDは点灯します。

F6キーを押してステップ実行していき、LEDが付いたり消えたりすれば成功です。

while()ループのところに HAL_Delay()という関数があります。
これは引数で指定した時間待ちを行う関数です。単位はミリ秒ですから、1000を指定すると1秒の時間待ちを行います。

その次の HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1)はGPIOポートに出力した状態を覚えておき、呼ばれるたびにその反転出力を行います。
つまり 0, 1 の状態を繰り返します。

それでは F8キーを押して Resume(再開)させてみましょう。

LEDが1秒毎に点滅を繰り返せば成功です。

Ctrl + F2キーで Terminate(終了)します。

いかがでしたか?

デバッガーを使ってプログラムを実行すると、1行ずつの処理が確認でき便利です。

それでは次回をお楽しみに。
お疲れさまでした。

LowPowerカテゴリの最新記事