皆さま こんにちは。
前回に続いて、今回はデバッガー(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行ずつの処理が確認でき便利です。
それでは次回をお楽しみに。
お疲れさまでした。
コメントを書く