Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス.   このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.

Dependents:   F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more

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_ = "";