Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialRxTxIntr.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2018-09-07
- Revision:
- 3:63d7bf321ba2
- Parent:
- 2:f6e15c19dd75
- Child:
- 4:fb847a82f735
File content as of revision 3:63d7bf321ba2:
//------------------------------------------------------------- // Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで // 複数のキャラクタ受送信をサポ-トするクラス // // 2018/09/07, 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) { for (int n=0; n<str.size(); n++) tx_.TxWrite(str[n]); if (lf) tx_.TxWrite('\n'); } // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン 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() > rxMax_) { // 文字数オーバーの処理,ボードの LED を高速に点滅する DigitalOut myLed(LED1); while (true) { myLed = !myLed; wait_ms(50); } } } // static メンバの実体の宣言/初期化 int SerialRxTxIntr::rxMax_; __IO bool SerialRxTxIntr::eol_ = false; string SerialRxTxIntr::rxBuffer_ = "";