前回、CubeMXでSTM32の初期化コードを作成しました。今回はそれを使ってLEDを点滅させます。Lチカプログラムの作成コードのインポートCubeMXで生成したコードをSW4STM32にインポートします。SW4STM32を起動して、FileメニューからImportをクリックします。Workspaceを選択してNextをクリックします。directoryのBrowseボタンをクリックして、CubeMXで生成したコードが入っているフォルダ(前回作成したblink_led)を選択します。ProjectsウィンドウでFinishボタンをクリックすれば、インポートされます。Explorerにblink_ledプロジェクトが追加されているので、横の「>」をクリックして中身を開きます。Srcフォルダの下にmain.cファイルがあるので、ダブルクリックして画面中央のエディタに表示します。Lチカコード追加CubeMXで生成されたmain.cファイルには、次のようなループが書かれています。挟まれている部分は、CubeMXで再度コードを生成したときに上書きされません。次のように書き加えます。頭に「HAL_」とつく関数はSTM32の機能を使いやすいようにあらかじめ用意されたものです。(マニュアルはこちら)HAL_GPIO_TogglePin()はGPIO出力に設定されているピンのHigh/Lowを切り替えることができる関数です。LEDとつながっているGPIOのポート(GPIOC)とピン番号(GPIO_PIN_15)を指定します。HAL_Delay()は指定した数字の分だけミリ秒単位で待機する関数です。上の例では100ms待機します。Finishedと表示され、実行ファイルであるelfファイルが生成されます。Lチカプログラムの実行STM32マイコンへの書き込みには、CubeProgrammerを使用します。CubeProgrammerのインストールCubeProgrammerはSTM32にプログラムを書き込んだり、デバッグができるソフトウェアです。こちらのページからダウンロードします。※最新版でないと新型のマイコンに書き込めないことがあります。今回はバージョン2.0.0をインストールしました。接続&書き込みUSBシリアル変換モジュールとマウス基板を接続します。STM32F7は電源を入れる時orリセット時にマイコンのBOOTピンをHIGHにしていれば、書き込み可能になります。この基板では書き込みボタンを押しながら電源を入れます。CubeProgrammerを起動して、接続方法としてUARTを選択し、「CONNECT」ボタンを押します。接続に成功したら、画面左端の「↓」ボタンを押して「Erase&Programming」画面に切り替えます。Programming」ボタンで書き込みを開始します。programming」がチェックされていると、書き込み完了と同時にLチカプログラムが実行され、LEDが点滅を始めます。次回は、シリアル通信でマイコンからPCに文章を表示してみたいと思います。今回はサンプルプログラムSTEP5の中身を確認していきたいと思います。メインプログラムの全体像からです。__cplusplusですが、ファイルの中を全部探しても、定義がどこでされているのか見つかりません。これは、もともとコンパイラに定義されているマクロであり、C++のコンパイラから読まれたときは有効になり、Cコンパイラから読まれたときはスルーされます。”C”もどこにも定義されていません。内に書かれた内容をCでコンパイルするための設定です。こんなにめんどくさい処理をするのかと言うと、C++では、同じ名称でも型などを変えると、違う関数を作ることが出来るため、関数をコンパイルすると内部では関数が修飾されて、名前が変わってしまうためです。(このことをマングルという。)最後にabortですが、これは、プログラムに何らかの異常が発生した場合、プログラムを終了終了させるための関数です。”C”{}を使っています。今回のメインプログラムは、init_all()とview_adc()です。なんか見た目、すごく少なく見えますが、関数の中で結構いっぱい処理があります。init_all()の中身はinit.hに記載されていますが、新たにinit_adcが追加されています。init_adcは、init.cの中で定義されています。183・185行目でいつものようにプロテクト解除・保護をやってます。184行目は電力の供給を行っています。(参考)187行目はAD変換の書き方を右詰にしています。ルネサスのマイコンは、初期設定は右詰になっていますので書く必要はないのですが、分かりやすくするため記載されています。(参考)ちなみに何故、右詰の必要があるのかと言うと、右側に予約ビットがあると、値を読みに行くときに、値をシフトさせなくてはならなくて、少し分かりにくいため右詰めにしています。188行目はPCLK(周辺クロック)の分周しない設定にしています。(参考)メインプログラムにあったview_adcは、adjust.cファイルで定義されています。センサーの値を読み取って電圧表示しています。USB_PRINTFは、USB通信でprintfするための関数です。18~21行目は、センサーの値を表示させています。22行目は、ADDR8に入っている値をmVの値になるように計算して、表示させています。