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:
- 5:151d281afa55
- Parent:
- 4:fb847a82f735
- Child:
- 6:8084247806a4
--- a/SerialRxTxIntr.cpp Tue Sep 18 00:13:29 2018 +0000 +++ b/SerialRxTxIntr.cpp Fri Sep 21 06:57:31 2018 +0000 @@ -2,71 +2,66 @@ // Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで // 複数のキャラクタ受送信をサポ-トするクラス // -// 2018/09/18, Copyright (c) 2018 MIKAMI, Naoki +// 2018/09/21, Copyright (c) 2018 MIKAMI, Naoki //------------------------------------------------------------- #include "SerialRxTxIntr.hpp" namespace Mikami { - // コンストラクタ - SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud) - : pc_(USBTX, USBRX, baud), tx_(pc_), buffer2_(""), echoOn_(false) - { - 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; + // コンストラクタ + SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud) + : pc_(USBTX, USBRX, baud), tx_(pc_), RX_MAX_(maxChar), + eol_(false), rxBuffer_(""), buffer2_(""), echoOn_(false) + { + pc_.format(); // default: 8 bits, nonparity, 1 stop bit + pc_.attach(callback(this, &SerialRxTxIntr::RxIsr)); + } - eol_ = false; - buffer2_ = rxBuffer_; // メッセージの保存 - rxBuffer_ = ""; // 受信バッファをクリア - return true; - } + // メッセージの終了であればそのメッセージを保存し true を返す + bool SerialRxTxIntr::IsEol() + { + if (!eol_) return false; - // 文字列の送信 - // lf が false の場合は,最後に '\n' を送信しない - void SerialRxTxIntr::Tx(string str, bool lf) - { - for (int n=0; n<str.size(); n++) - tx_.TxWrite(str[n]); - if (lf) tx_.TxWrite('\n'); - } + eol_ = false; + buffer2_ = rxBuffer_; // メッセージの保存 + rxBuffer_ = ""; // 受信バッファをクリア + return true; + } - // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン - void SerialRxTxIntr::RxIsr() - { - unsigned char chr = pc_.getc(); - if (echoOn_) // エコーバックが有効な場合 - { - tx_.TxWrite(chr); // エコーバック - if (chr == '\r') tx_.TxWrite('\n'); - } - // "\r" を受信した場合はメッセージの終了とする - // "\r" は rxBuffer_ に追加されない - if (chr == '\r') eol_ = true; - else rxBuffer_ += chr; + // 文字列の送信 + // lf が false の場合は,最後に '\n' を送信しない + void SerialRxTxIntr::Tx(string str, bool lf) + { + for (int n=0; n<str.size(); n++) + tx_.TxWrite(str[n]); + if (lf) tx_.TxWrite('\n'); + } - // 受信するメッセージの文字数のチェック - 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_ = ""; -} + // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン + void SerialRxTxIntr::RxIsr() + { + unsigned char chr = pc_.getc(); + if (echoOn_) // エコーバックが有効な場合 + { + tx_.TxWrite(chr); // エコーバック + if (chr == '\r') tx_.TxWrite('\n'); + } + // "\r" を受信した場合はメッセージの終了とする + // "\r" は rxBuffer_ に追加されない + if (chr == '\r') eol_ = true; + else rxBuffer_ += chr; + + // 受信するメッセージの文字数のチェック + if (rxBuffer_.size() > RX_MAX_) + { + // 文字数オーバーの処理,ボードの LED を高速に点滅する + DigitalOut myLed(LED1); + while (true) + { + myLed = !myLed; + wait_ms(50); + } + } + } +} \ No newline at end of file