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:
- 4:fb847a82f735
- Parent:
- 3:63d7bf321ba2
- Child:
- 5:151d281afa55
--- a/SerialRxTxIntr.cpp Fri Sep 07 12:55:52 2018 +0000 +++ b/SerialRxTxIntr.cpp Tue Sep 18 00:13:29 2018 +0000 @@ -2,69 +2,71 @@ // Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで // 複数のキャラクタ受送信をサポ-トするクラス // -// 2018/09/07, Copyright (c) 2018 MIKAMI, Naoki +// 2018/09/18, Copyright (c) 2018 MIKAMI, Naoki //------------------------------------------------------------- #include "SerialRxTxIntr.hpp" -// コンストラクタ -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; - - eol_ = false; - buffer2_ = rxBuffer_; // メッセージの保存 - rxBuffer_ = ""; // 受信バッファをクリア - return true; -} - -// 文字列の送信 -// lf が false の場合は,最後に '\n' を送信しない -void SerialRxTxIntr::Tx(string str, bool lf) +namespace Mikami { - for (int n=0; n<str.size(); n++) - tx_.TxWrite(str[n]); - if (lf) tx_.TxWrite('\n'); -} + // コンストラクタ + 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; -// シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン -void SerialRxTxIntr::RxIsr() -{ - unsigned char chr = pc_.getc(); - if (echoOn_) // エコーバックが有効な場合 - { - tx_.TxWrite(chr); // エコーバック - if (chr == '\r') tx_.TxWrite('\n'); + eol_ = false; + buffer2_ = rxBuffer_; // メッセージの保存 + rxBuffer_ = ""; // 受信バッファをクリア + return true; } - // "\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_) + // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン + void SerialRxTxIntr::RxIsr() { - // 文字数オーバーの処理,ボードの LED を高速に点滅する - DigitalOut myLed(LED1); - while (true) + unsigned char chr = pc_.getc(); + if (echoOn_) // エコーバックが有効な場合 { - myLed = !myLed; - wait_ms(50); + tx_.TxWrite(chr); // エコーバック + if (chr == '\r') tx_.TxWrite('\n'); + } + // "\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_ = ""; } - -// static メンバの実体の宣言/初期化 -int SerialRxTxIntr::rxMax_; -__IO bool SerialRxTxIntr::eol_ = false; -string SerialRxTxIntr::rxBuffer_ = ""; -