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

Dependents:   F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more

Committer:
MikamiUitOpen
Date:
Fri Sep 21 06:57:31 2018 +0000
Revision:
5:151d281afa55
Parent:
4:fb847a82f735
Child:
6:8084247806a4
6, delete unnecessary static keywords.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:6b652858f92d 1 //-------------------------------------------------------------
MikamiUitOpen 0:6b652858f92d 2 // Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで
MikamiUitOpen 0:6b652858f92d 3 // 複数のキャラクタ受送信をサポ-トするクラス
MikamiUitOpen 0:6b652858f92d 4 //
MikamiUitOpen 5:151d281afa55 5 // 2018/09/21, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:6b652858f92d 6 //-------------------------------------------------------------
MikamiUitOpen 0:6b652858f92d 7
MikamiUitOpen 0:6b652858f92d 8 #include "SerialRxTxIntr.hpp"
MikamiUitOpen 0:6b652858f92d 9
MikamiUitOpen 4:fb847a82f735 10 namespace Mikami
MikamiUitOpen 0:6b652858f92d 11 {
MikamiUitOpen 5:151d281afa55 12 // コンストラクタ
MikamiUitOpen 5:151d281afa55 13 SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud)
MikamiUitOpen 5:151d281afa55 14 : pc_(USBTX, USBRX, baud), tx_(pc_), RX_MAX_(maxChar),
MikamiUitOpen 5:151d281afa55 15 eol_(false), rxBuffer_(""), buffer2_(""), echoOn_(false)
MikamiUitOpen 5:151d281afa55 16 {
MikamiUitOpen 5:151d281afa55 17 pc_.format(); // default: 8 bits, nonparity, 1 stop bit
MikamiUitOpen 5:151d281afa55 18 pc_.attach(callback(this, &SerialRxTxIntr::RxIsr));
MikamiUitOpen 5:151d281afa55 19 }
MikamiUitOpen 0:6b652858f92d 20
MikamiUitOpen 5:151d281afa55 21 // メッセージの終了であればそのメッセージを保存し true を返す
MikamiUitOpen 5:151d281afa55 22 bool SerialRxTxIntr::IsEol()
MikamiUitOpen 5:151d281afa55 23 {
MikamiUitOpen 5:151d281afa55 24 if (!eol_) return false;
MikamiUitOpen 4:fb847a82f735 25
MikamiUitOpen 5:151d281afa55 26 eol_ = false;
MikamiUitOpen 5:151d281afa55 27 buffer2_ = rxBuffer_; // メッセージの保存
MikamiUitOpen 5:151d281afa55 28 rxBuffer_ = ""; // 受信バッファをクリア
MikamiUitOpen 5:151d281afa55 29 return true;
MikamiUitOpen 5:151d281afa55 30 }
MikamiUitOpen 0:6b652858f92d 31
MikamiUitOpen 5:151d281afa55 32 // 文字列の送信
MikamiUitOpen 5:151d281afa55 33 // lf が false の場合は,最後に '\n' を送信しない
MikamiUitOpen 5:151d281afa55 34 void SerialRxTxIntr::Tx(string str, bool lf)
MikamiUitOpen 5:151d281afa55 35 {
MikamiUitOpen 5:151d281afa55 36 for (int n=0; n<str.size(); n++)
MikamiUitOpen 5:151d281afa55 37 tx_.TxWrite(str[n]);
MikamiUitOpen 5:151d281afa55 38 if (lf) tx_.TxWrite('\n');
MikamiUitOpen 5:151d281afa55 39 }
MikamiUitOpen 4:fb847a82f735 40
MikamiUitOpen 5:151d281afa55 41 // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン
MikamiUitOpen 5:151d281afa55 42 void SerialRxTxIntr::RxIsr()
MikamiUitOpen 5:151d281afa55 43 {
MikamiUitOpen 5:151d281afa55 44 unsigned char chr = pc_.getc();
MikamiUitOpen 5:151d281afa55 45 if (echoOn_) // エコーバックが有効な場合
MikamiUitOpen 5:151d281afa55 46 {
MikamiUitOpen 5:151d281afa55 47 tx_.TxWrite(chr); // エコーバック
MikamiUitOpen 5:151d281afa55 48 if (chr == '\r') tx_.TxWrite('\n');
MikamiUitOpen 5:151d281afa55 49 }
MikamiUitOpen 5:151d281afa55 50 // "\r" を受信した場合はメッセージの終了とする
MikamiUitOpen 5:151d281afa55 51 // "\r" は rxBuffer_ に追加されない
MikamiUitOpen 5:151d281afa55 52 if (chr == '\r') eol_ = true;
MikamiUitOpen 5:151d281afa55 53 else rxBuffer_ += chr;
MikamiUitOpen 5:151d281afa55 54
MikamiUitOpen 5:151d281afa55 55 // 受信するメッセージの文字数のチェック
MikamiUitOpen 5:151d281afa55 56 if (rxBuffer_.size() > RX_MAX_)
MikamiUitOpen 5:151d281afa55 57 {
MikamiUitOpen 5:151d281afa55 58 // 文字数オーバーの処理,ボードの LED を高速に点滅する
MikamiUitOpen 5:151d281afa55 59 DigitalOut myLed(LED1);
MikamiUitOpen 5:151d281afa55 60 while (true)
MikamiUitOpen 5:151d281afa55 61 {
MikamiUitOpen 5:151d281afa55 62 myLed = !myLed;
MikamiUitOpen 5:151d281afa55 63 wait_ms(50);
MikamiUitOpen 5:151d281afa55 64 }
MikamiUitOpen 5:151d281afa55 65 }
MikamiUitOpen 5:151d281afa55 66 }
MikamiUitOpen 5:151d281afa55 67 }