ショウのマイクロマウス研修マウス自作研修

ショウのマイクロマウス制作-Part4

ショウのマイクロマウス研修

こんにちはショウです。前回はSTM32CubeIDEを使って開発環境を整えプロジェクトを作成しました。
今回はCubeIDEの使い方を確認しながらLチカをしていきます。
Lチカとは組み込み開発で一番最初に行われることの多い作業で、マイコンのピンにつないだLEDをオンオフしてチカチカさせることです。プログラミングでいう”Hello World!”ですね。

Lチカを行うために作業を進めていきます。

マイコンのピン設定

前回の最後にマイコンが表示された下の画面まで進みました。

マイコンのピン設定

まずはこの画面の使い方から説明していきます。

この画面はCubeIDEに同梱されているSTM32CubeMXというソフトです。(実は前回マイコンを選択する部分からCubeMXの機能を使ってました。)CubeMXは単体でもダウンロードすることができます。これは使用するピンをマウス操作で直感的に設定することができます。これを使うことによってマウスなどを作る際のピンの機能をデータシートを1から読み込まなくても確認することができます。(実は私はマイコンを選定する際にこの機能を使って予定している機能の配置確認をしてました。)
このマイコンの図を見てみると周りにピンが出ているのがわかると思います。このピンごとに機能を割り振っていきます。ピンには何色かの色がついているのがわかると思います。色がついているピンには機能が設定されています。

これは、プロジェクトを作る際にNucleoボードを選択して作成したので、いくつかのピンにはすでにNucleoを使うための機能が設定されています。Nucleoボードのような開発ボードを使わずにマイコンだけでプロジェクトを作成すると、下の図の右側のようにほとんどのピンに色が塗られていないプロジェクトが作成されます。

プロジェクト画面

ピンに機能を設定するには、CubeMXの左側のCategoriesから使いたい機能を選択することでピンに設定することができます。
また、マイコン図のピンを直接クリックして選択することもできます。

開発ボードなどを使わない場合、LチカをするためにLEDをつなげるピンを決めて、ブレッドボードなどで回路を作るところから始まるのですが、Nucleoボードには制御可能なLEDが用意されています。(Arduinoなどと同じ)

LD2と書いてあるピンがNucleoボード上に載っているLEDにつながっています。このLD2はGPIOという機能が設定されています。GPIOはピンの入出力設定を行う機能です。

LD2

今回はこのNucleoボードに載っているLEDを使ってLチカをしていきます。

ライブラリ選択

STMマイコンには開発を簡単にしてくれるHALとLLの2つライブラリが用意されています。

LLライブラリの解説書に2つのライブラリの違いが書いてありました。

違いの部分だけを書くと

HALライブラリはSTM32シリーズ内のコードの互換性とユーザーの記述量を減らす目的で作られています。そのため、高速応答が必要なアプリがやや不得意で、コードサイズも大きくなっているそうです。

LLライブラリはHALライブラリの問題点を解決するために作られたライブラリで、ユーザーの記述量は増えるが、工夫次第で高速に動作し、コードサイズはHALよりも少なくなるそうです。

マイクロマウスでは高速に動作することや、コードサイズが少なく、走行データを多く保存できた方が有利なので、今回私はLLライブラリを使用することにしました。

LLライブラリの選択はCubeMXの画面で、Project Managerに移動してAdvanced Settingsの中のDriver Selectorで選択します。デフォルトではHALライブラリが選択されているので変更します。

CubeMXの画面で、Project Managerに移動してAdvanced Settingsの中のDriver Selectorで選択

ついでに設定した機能ごとにソースファイルとヘッダファイルを作成してくれるように設定を変更します。マイクロマウスを作っていると機能が増えていくため、機能ごとに分離しておくと後々便利です。

設定した機能ごとにソースファイルとヘッダファイルを作成してくれるように設定を変更

ここまで設定したら保存をするか、アイコンをクリックするとCubeMXが設定が反映されたコードを自動作成してくれます。いちいち設定をコードに起こさなくていいのですごく便利です。

gpio.cなどが自動的に生成される

このようにgpio.cなどが自動的に生成されます。

ST-Linkのドライバ更新

Lチカのコードを書く前にマイコンの書き込みに使うST-Linkのドライバを更新します。

デバイスドライバの更新ファイルはhttps://www.st.com/ja/development-tools/stsw-link009.htmlからダウンロードします。

ダウンロードしたzipファイルを解凍しておき、デバイスマネージャーからST-Linkを探し、デバイスの更新で解凍したファイルを選択して更新します。

Lチカ

これで準備ができたのでLチカのプログラムを書いていきます。

今回設定するのはGPIOのオンオフだけです。

まずは、生成されたmain.cを開いてみます。

main.c

このようになっていてMX_GPIO_Init()などが自動的に設定されています。

gpio.cにGPIOの初期設定がされています。

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

このようにCubeIDEではユーザーがコードを記述する場所が決められています。この範囲以外にコードを書くと、CubeMXで自動コード生成をするたびに記述したコードが消えてしまうので注意が必要です。(私は最初の頃に間違えてコードを消しました。)

main関数の中の無限ループ部分にGPIOの設定を書き込みます。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  LL_GPIO_SetOutputPin(LD2_GPIO_Port,LD2_Pin);
	  LL_mDelay(1000);
	  LL_GPIO_ResetOutputPin(LD2_GPIO_Port,LD2_Pin);
	  LL_mDelay(1000);
    /* USER CODE END WHILE */

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

LL_GPIO_SetOutputPin関数が出力をHIGHにする関数で、LLGPIO_ResetOutputPinが出力をLOWにする関数です。引数はmain.hに定義されています。今回はLD2_GPIO_PortがGPIOA(PA〇〇というピン)、LD2_Pinが5と定義されていて、PA5ピンのHIGH、LOWを設定しています。関数はDriversというファイルの中にLLライブラリのファイルが入っているので探すとどのレジスタに書き込んでいるのか知ることができます。

プログラムがかけたらビルドをして、Nucleoボードに書き込みます。

ビルドはProjectからBuild Allをクリックするとできます。

ビルドができたらいよいよ書き込みを行います。

書き込みはアイコンをクリックします。そうすると先程のコードがマイコンに書き込まれLチカが始まります。

Lチカ

LEDを1秒ごとにチカチカさせることができました。

Lチカができるようになったので今回はここまでにします。次回はPCとの通信をしたいと思います。

参考URL

参考にさせて頂いたブログです。

STM32 + LL でGPIO 機能を使用する | Sora's Activity Record
STM32マイコンのペリフェラル関連記事を一覧にまとめました。 stm32従来のライブラリであったSPLライブラリと同様の機能であり、STM32CubeMXから提供されているLLラ...

 

タイトルとURLをコピーしました