Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
Diff: SerialRxTxIntr.cpp
- Revision:
- 0:6b652858f92d
- Child:
- 1:09c07078126f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SerialRxTxIntr.cpp Mon Jun 11 10:38:25 2018 +0000 @@ -0,0 +1,63 @@ +//------------------------------------------------------------- +// Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで +// 複数のキャラクタ受送信をサポ-トするクラス +// +// 2018/06/09, Copyright (c) 2018 MIKAMI, Naoki +//------------------------------------------------------------- + +#include "SerialRxTxIntr.hpp" + +// コンストラクタ +SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud) + : pc_(USBTX, USBRX, baud), tx_(pc_), buffer2_("") +{ + rxMax_ = maxChar; + pc_.format(); // default: 8 bits, nonparity, 1 stop bit + pc_.attach(callback(this, &SerialRxTxIntr::RxIsr)); +} + +// メッセージの終了であればそのメッセージを保存し true を返す +bool SerialRxTxIntr::IsEol() +{ + if (!eol_) return false; + + eol_ = false; + buffer2_ = rxBuffer_; // メッセージの保存 + rxBuffer_ = ""; // 受信バッファをクリア + return true; +} + +void SerialRxTxIntr::Tx(string str) +{ + for (int n=0; n<str.size(); n++) + tx_.TxWrite(str[n]); + tx_.TxWrite('\n'); + +} + +// シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン +void SerialRxTxIntr::RxIsr() +{ + unsigned char chr = pc_.getc(); + // "\r" を受信した場合はメッセージの終了とする + // "\r" は rxBuffer_ に追加されない + if (chr == '\r') eol_ = true; + else rxBuffer_ += chr; + + // 受信するメッセージの文字数のチェック + if (rxBuffer_.size() > rxMax_) + { + // 文字数オーバーの処理,ボードの LED を高速に点滅する + DigitalOut myLed(LED1); + while (true) + { + myLed = !myLed; + wait_ms(50); + } + } +} + +// static メンバの実体の宣言/初期化 +int SerialRxTxIntr::rxMax_; +__IO bool SerialRxTxIntr::eol_ = false; +string SerialRxTxIntr::rxBuffer_ = "";