ST Microelectronicsが送る、STM32開発エコシステムによる開発実習第3弾、ユアト実習編です。通信ポートとして広く普及し、さまざまな通信モジュルやPCとの連携にも使える、便利なユアトを動かすプログラム実装体験を押していただきます。それでは始めましょう。この実習では、ユアトの割り込む機能を使ったPCからのユアトループバック操縦心を実現いたします。PCとはSTリンクのUSBユアト変換機能を通して通信します。使用する機材はニュークレオボードとPC上で実行するターミナソフトのテラタームです。GPIO実習の時と同じようにCubeMXを開きます。GPIO実習でご説明した通り、CubeMXはプロジェクトを作るにあたって3つのアプローチがあります。今回のユアト実習では、2つ目のSTMicro Electronicsが販売しているSTMさんに評価ボードの中から選択して始める方法を使います。CubeMXの初期画面から、ニュープロジェクトにある3つのボタンのうち、2番目のアクセス2ポードセレクターをクリックし、ポップアップされたウィンドウ左側のフレーム内にあります。タイプはニュークレオ64を、シリーズはSTMさんにF4をそれぞれ選択します。そうしますと、右側のフレームにフィルタによって絞られたボードの一覧を見ることができます。その中のニュークレオF401REをダブルクリックします。ボードを選択してダブルクリックしますと、ユニシメスポップアップが表示されます。これはボードで使われているペリファラルに合わせた設定を適用するか、の問いになっており、ここではOKを押してボードに合わせた設定を適用します。OKを押しますと、すでにいくつかのピンが設定済みの状態の画面が開きます。GPR実習の時に設定していたユーザースイッチやLD2のピンのほか、バッカの端子、外部クロック26端子や本実習で使うウアットピンが設定されています。では実際にボードを選択して開いてみましょう。ではプロジェクトを作っていきます。今回ボードをセレクトして始めるこの2つ目のアクセス2ボードセレクターをクリックします。そうしますと、ボードを選択するポップアップしたこの画面が出てきますので、タイプですね。ニュークレ64、こちらをクリックしていただいて、シリーズはですね、STEM32F4をクリックしていただきます。こちらです。そうしますとボードが4種類出てきます。ちょっとまぎらしいのですが、1番上のF401を選択していただきます。他のですね、410や411ではないので気をつけてください。1番上のニュークレをF401REを選択してダブルクリックします。そうしますと、ペリファラルの触記化をしますかと、デフォルトの設定を消費化しますかってことで、ESを押します。そうしますと、あらかじめもういくつかのピンが設定された状態の画面が開かれます。クロックとURとGPアントキーに使っていたLEDにつながっているLEDのピン、PA5ですね。その他、ユーザースイッチのPC13がもうすでに設定済みです。その他、デバッカーとしてのピンがいくつか設定済みの状態で画面が表示されています。それではUARTの細かい設定について行います。今回使用するのはUSA2です。STM32は非動機通信であるUARTの他、動機通信も行えるUSA2を搭載しており、今回USA2はUARTとして既に設定されています。左側のフレーム内になります。コネクティビティグループからUSA2を選択し、モード&コンフィグレーションウィンドウを開きます。次に、コンフィグレーションウィンドウ内のエルビックセッティングスタブを開き、USA2グローバルインタラフトのイネーブルドにチェックを入れ、USA2の割り込みを有効化します。今回設定変更は行いませんが、UART通信に必要なボーレートやビット調、パリティビットの設定などは、パラメータセッティングスタブ内にあります。既に115.2Kbps、8ビット、パリティーなし、トップビット1が設定されています。もしPCとの通信速度や設定を変えたい場合には、ここを変更します。これにより、ボーレートを設定する際の複雑な分収費を計算して、レジスタを設定するコードが自動的に生成されます。変更するパラメータのヘルプを見たい場合には、パラメータを選択後、右上にありますIのマークをクリックしていただきますと、カブにパラメータに関するヘルプが表示されます。最後にGPIO実習でも行ったLVICの詳細設定を行います。左側のフレームからシステムコアを選び、その中のLVICを選択すると、モード&コンフィグレーションウィンドウが開きます。先ほどの設定で、既にUSA2の割り込みは有効化してありますので、システック割り込みを優先させるため、サブプラウティーを1に設定し、割り込みの優先度を下げます。この数字の値が大きくなるほど優先順位が下がることは、もう既にご存知ですね。では、ここまでの流れを実際の画面で見てみましょう。ではUARTの設定を行っていきます。コネクティビティグループの中のUSA2を選択します。選択しますと、モード&コンフィグレーションのインドウが開いて、モードがもうUARTのアシンクラス設定になっています。その中のLVICスタンセッティングスを開きまして、グローバルインタラプトをイネーブルにします。UARTの通信速度のパラメータとかですね。こちらのパラメータセッティングスの中にあります。ベーシックパラメータのボーレートとかですね。全て初期化済みです。もしですね、このパラメータ変更したい、その時のヘルプが欲しい場合には、こちらのアイのボタンを押していただくと、下にですね、パラメータのヘルプが出てきます。次にNVICの詳細セットをしていきます。先ほどUARTの設定で設定済みですので、割り込みが有効になっています。システック割り込みを優先度を上げたいので、USA2の割り込みの優先を下げるために0から1に変更します。ここまでの設定で迷光の設定は終了です。この後は生成するプロジェクトファイルに関する設定を行っていきます。画面上部にあります。プロジェクトマネージャーをクリックして開きます。まずはじめにプロジェクトの名前を設定します。プロジェクトネームにプロジェクトの名前を設定し、プロジェクトロケーションにはプロジェクトを保存するルートデリクトリーを設定します。ここで重要な注意点です。プロジェクト名やプロジェクトを保存するフォルダのパスに全角半角スペース、感じカナダの2バイト文字を含めてはいけません。使うツールによってはパスが通らなくなり、プロジェクトをビルドする際にエラーになることが報告されています。次にコード生成時の詳細設定を行います。画面左側の上から2番目にあります。コードジネータをクリックします。デフォルトではビルドに必要ない全てのファイルをプロジェクトフォルダにコピーする設定になっており、プロジェクトを作るたびに膨大な量のファイルが複製され、PCのストレージをアパックすることになります。そこで最上段設定2番目のコピーオンリーネスサリーライバリーファイルズに変更し、不必要なファイルのコピーを防ぎます。これで初期化コードを生成する準備が全て整いました。設定してこなかった細かな内容に関しましては、ベッドCubeMixのユーザーマニュアル等をご紹介しますので、そちらを参考にしていろいろ試してみてください。では画面右上にあります。Generateコードをクリックします。しばらくしてコード生成が完了すると、生成されたプロジェクトファイルを設定したツールチェーンで開くか、フォルダを開くか、一旦終了するかの選択肢を訪ねてきます。EW ARMを使って開くので、オープンプロジェクトをクリックして開きます。ここで念のためビルのが通ることを確認します。EW ARMのプロジェクトメニューから全てを再ビルドを選択しビルドします。YouArt実習では3つのプログラムを実装していきます。1つ目は、YouArt割り込みの状態を監視して、受信と送信のタイミングを制御するメイン関数処理で、2つ目と3つ目は、YouArtの送受信管理を割り込み処理です。それぞれ詳しく見ていきましょう。まずメイン関数処理です。メイン関数内では、マイコンのさまざまな処避化を行い、YouArtが目的の動作をするように設定します。その後、YouArtステータス変数を0に処避化後、YouArt受信を開始、YouArt割り込みによって、値が代入されることをループ処理に行って監視、送受信を行います。YouArtステータス変数が1になった場合、PCからのデータを受信したことを示しており、YouArtステータス変数を2に変更して、受信したデータを送信します。その後、送信管理を割り込み処理によって、送信管理を示す3が、YouArtステータス変数に代入されることを監視します。YouArtステータス変数が3になったことを確認できたら、送信完了ですので、再度、YouArtステータス変数を0にし、受信を開始します。次に、受信管理を割り込み処理です。受信管理を割り込み処理では、PCから送信されてくる1バイトのデータを受信した際に、YouArtステータス変数に位置を代入するだけです。実際の受信したデータは、受信監視の関数の引き継いで指定したBufferに入力されています。送信管理を割り込み処理では、PCSを送信する1バイトのデータがBufferから送信された際に、YouArtステータス変数を3に代入するだけです。続いて、実際のコードを記入する際の重要な注意点をご説明いたします。CubeMXで生成されたコードには、ユーザーコードビギンと、ユーザーコードエンドのコメントの記載があり、このコメント分の間にのみ、ユーザーコードを追期することが可能です。このルールにのっとって追期したユーザーコードは、GPIOの設定等を変えたなどをして、再度CubeMXにてコード生成した場合でも保護されます。逆に、このコメント分の範囲外の部分にユーザーコードを追加したり、CubeMXで自動生成されたコードを編集しますと、再度コードを生成した際に追期したコードは消えてしまい、変更した部分は全て元に戻ってしまいます。なお、ユーザーがこのコメント分を模範して記入しても、コード再生成時に消えてしまいますので、必ず生成されたコード内のコメント分の間に追期するようお願いいたします。では実際に、main.cファイルにコードを追期していきます。お手元の資料からコピーして入力すると簡単です。説明のため、スライド分けてある箇所がありますが、コピペ用のまとめたスライドも受けてありますので、コピペの際にはそのスライドから行ってください。まず、追期箇所1箇所目です。ユーザーコードをbegin.include、ユーザーコードエンド.includeの間に追期していきます。今回PCとの操縦シンデータにアスキーモジ列を使いますので、sling.hをincludeします。追期箇所2箇所目です。ユーザーコードbegin.0、ユーザーコードエンド.0の間に追期していきます。ユアート割り込み判定のための変数である、ユアートしていたセンスを追期します。与党のUnderscoreは2つですので、気をつけてください。wUnderscore.ioはボラタル宣言のマクロです。また、操縦シンデータを確認する8倍と分のbuffaのユアートbuffを追期します。次箇所3箇所目です。ユーザーコードbegin.0、ユーザーコードエンド.0の間に追期していきます。実際のメインループ処理を追加します。ユアートしていたセンスを初期加工、操縦シンバッフをクリアし、受信を開始後、ユアートしているセンスを監視して分岐するコードを追加します。ハルユアートレシーブITは、ユアート受信管理割り込みを発生させるユアート受信開始のための関数で、第1期数に使用するユアートハンドラを、第2期数に受信するためのbuffaを、第3期数に受信バイト数を与えます。次箇所3箇所目の続きです。ハルユアートtransmitITは、ユアート送信管理割り込みを発生させるユアート送信開始のための関数で、第1期数に使用するユアートハンドラを、第2期数に送信するデータの格納されたbuffaを、第3期数に送信バイト数を与えます。コピペ用のスライドです。次箇所4箇所目です。ユーザーコードbegin4、ユーザーコードend4の間に追記していきます。こちらにはユアート送受信管理割り込みコールバック関数処理を追記していきます。まず最初にユアート受信管理割り込みコールバック関数処理を追記します。どのユアートからの受信管理割り込み化を判断し、ユアートステータ線数に位置を代入するコードです。次箇所4箇所目の続きです。ユアート送信管理割り込みコールバック関数処理を追記します。どのユアートからの送信管理割り込み化を判断し、ユアートステータ線数に3を代入するコードです。コピペ用のスライドです。追記は終わりましたら、プロジェクトメニューの中程にあります。メイクを選択してビルドします。ビルド完了後、ヘラやワーニングないことを確認します。ビルドが完了しましたら、お手元のニュークレボードをPCと接続します。接続されると、モード右上にあるLD1が赤色に点灯し、モード中程にあるLD3も赤色に点灯します。では実際にボードに書き込んでデバックしましょう。プロジェクトメニューからダウンロードしてデバックを選択し、ボードにデータをダウンロードします。ボードと通信中、LD1が点滅します。ダウンロードが完了するとデバックモードに切り替わります。ボードのLD1は緑色に点灯します。準備ができましたら実行しましょう。PCのキーボードのF5キーを押すか、デバックメニューを開き、一番上の実行をクリックします。次にPC側のテラタウムの設定を行います。テラタウムを起動すると、接続先を選択するウィンドウが開きます。下の段にあるシリアルを選び、ポートはSTマイクロエレクソロニックスSTリンクバーチャルコンポートを選択します。選択後、オーケーを押しますと黒い画面になると思います。ポートの設定を行うために、設定メニューのシリアルポートを選択し、スピードを1.5.2.0.0になっていることを確認します。設定が終わりましたら黒い画面に戻りますので、何かキーボードで文字を打ち込んでみてください。打ち込んだ文字が表示されれば正しく動作しています。それでは実際に操作してみます。実際に動かしています。ビルドが終わってエワーニングエラーがゼロになっているのを確認できましたら、ダウンロードしてデバッグを押して、ダウンロードして実行します。どちらのボタンを押しても構いませんので、ダウンロードしてください。その後、デバッグメニューから一番上の実行、もしくは同じ白色のボタン右上にありますけども、こちらを押しても実行が可能です。エレはマイコンを実行します。プログラムが動いている間は、LD1のLDがテントでメッセージすると思います。次にテラータームを立ち上げます。立ち上げると接続先を選択するインドが開くので、シディアルを選択して、ポートはですね、STマイクロのSTリンクのバータルコンポートを選んでオッケーを押します。その後ですね、設定メニューを開いて、シディアルポートの設定を開きます。スピードがですね、QBMX設定した1時5200、115.2KBPSになっているのを確認して、こちらをクリックして閉じます。いったんですね、テラーターム右上の方にちょっと多いやりまして、キーボードをお見せします。ちょうどですね、下のキーボードでポチポチと押していきますが、それに合わせてテラータームの文字が入力されているのがわかると思います。皆さんもですね、文字表示していますでしょうか。ここまでですね、動かしてみてください。取りながらなのでちょっと手の動きが変ですけども。はい。でですね、いったんここで、EWMの方で出ばっかり一旦ブレークかけます。マイコン止めるってことですね。止めた上でキーボードの入力を再度行うと、あれ、文字が出ません。そうですね、マイコン止めてますので、ルーフバック通信が止まっている状態です。で、再度実行をかけますと継続してそのまま動き始めますので、文字がですね、入れたのが表示されます。実際に、ユーザーアプリケーションに追加した際に使った春ドライバの簡単なご説明をいたします。まず一つ目は、春ユアトトランスミットITです。ユアト送信完了割込の発生を伴うユアト送信関数です。こちらの第一引数には、ユアトのハンドラを指定します。第2引数には、送信データを確認しているバッファを、第3引数には、送信サイズを5倍と数で指定します。二つ目は、春ユアトレシーブITです。ユアト受信完了割込の発生を伴うユアト受信関数です。こちらの第1引数には、ユアトのハンドラを指定します。第2引数には、受信データを確認するバッファを、第3引数には、受信サイズを倍と数で指定します。最後は、春ユアトRXもしくはTX、コンプリートコールバックです。CPLTはコンプリートの略です。ユアトの受信もしくは送信完了割込の発生時にコールされる関数で、第1引数に、どのユアトからの割込だったかの情報が確認されています。実際のドライバーのソースコードは、プロジェクトを保存したフォルダにあるドライバーズディレクトリー内のSTMさんにF4XX春ドライバーフォルダにあります。ドライバーの使用方法に関しましては、該当のソースコードやヘッダやコメント分、または、Webに公開しているユーザーマニュアル1725番UM17252Tを確認ください。資料にはWebリンクを埋め込んでありますので、クリックして参照してください。では最後に、動いたままのボードを止めてデバッグを終了します。EWARMのデバッグメニューからデバッグの提唱選びデバッグモードを終了します。その後、EWARMをCubeMXも終了させます。実習していただいた感想はいかがでしょうか?比較的簡単に動作させることができたかと思います。STMさんにマイコンは各種のソフトウェアが準備されています。次のスライドにSTMさんにマイコンのインターネットル入手可能なベンニナリンコをまとめましたのでお活用ください。これでEWARM実習編を終了します。続いてSPI実習に入ります。STMさんに開発エコシステムによる開発実習、SPI実習編を開いてください。