前回までで、MbedのDigitalOutクラス(GPIOの出力ポート)を動かすことができました。
今回はSerialクラスを動かしてみることにします。
投稿時の開発環境を記しておきます。
PC:Windows10 OS
IDE: STM32CubeIDE Version1.1.0
Configurator: STM32CubeMX Version5.4.0
Board: STM32Nucleo-F401RE
Mbed の Serialクラスとは?
英語ですけれど こちら を見ていただくと概要がわかると思います。
コーディングしてみる
それではさっそくコードを書いてみましょう。
コード量は少ないのでプロジェクトは前回の F401mbedBase をそのまま使えば良いでしょう。
main.cppの whileループのあたりを以下のように書いてみてください。
/* USER CODE BEGIN WHILE */
Serial s(SERIAL_TX, SERIAL_RX);
s.baud(9600);
s.format(8, SerialBase::None, 1);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
char c;
while (s.readable())
{
c = s.getc();
s.putc(++c);
}
}
/* USER CODE END 3 */
通信する相手の設定をする
通信相手にデバッガをつないだパソコンを使うと便利です。
Tera Term を使って STマイクロのVCP(仮想COMポート)を選択することで簡単に通信環境を構築することができるのでした。
VCP?(はてな)と思われる方は こちら の記事が参考になりますので覗いて見てください。
今回はボーレートを9600にしていますので、以下の通りに設定してください。
Serialクラスのbaud(), format()の内容に合わせる必要があります。
なおCOMポートはボードをUSBケーブルで接続した状態で検出されるVirtual COM Portを選択してください。
ビルドして実行する
それではビルドして実行してみてください。
単にエコーバックするだけだと、Tera Term上でエコーしているのかよくわからないので今回は受信した文字をかえて返信してみました。
s.putc(++c)の部分ですね。
パソコンから a を送れば b が表示され、3 を送れば 4 が表示されます。
なぜそうなるのかわからない方がいましたら、ネットで「ASCIIコード表」を調べてみてください。
コードの説明
簡単なので説明は不要だと思いますがチラリと書いておきます。
コンストラクタとbaud(), format()関数を呼べば設定は終わりです。
baud()で通信速度の設定を行い、format()で通信パラメーターの設定を行っています。
HALのAPIに比べると少ないコード量ですみますね。
readable()は基本クラスのSerialBaseの方で定義されています。
受信バッファにデータがあれば 1 が返るので、その場合には読み込んだ値に1を加えて返信しています。
お馴染みの putc(), getc()は基本クラスのStreamの方で定義されています。
いかがでしたでしょうか。
次回はタイマー系の Tickerクラスに挑戦します。
Tickerクラスの概要は こちら になります。
これは意外とやっかいです。。
簡単には動きません(笑)
ご興味のある方は、ぜひ動かしてみてください。
この続きを読むには こちら からどうぞ。
コメントを書く