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

Dependents:   F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more

Committer:
MikamiUitOpen
Date:
Mon Jul 09 03:55:55 2018 +0000
Revision:
1:09c07078126f
Parent:
0:6b652858f92d
Child:
2:f6e15c19dd75
2

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 1:09c07078126f 5 // 2018/07/09, 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 0:6b652858f92d 10 // コンストラクタ
MikamiUitOpen 0:6b652858f92d 11 SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud)
MikamiUitOpen 0:6b652858f92d 12 : pc_(USBTX, USBRX, baud), tx_(pc_), buffer2_("")
MikamiUitOpen 0:6b652858f92d 13 {
MikamiUitOpen 0:6b652858f92d 14 rxMax_ = maxChar;
MikamiUitOpen 0:6b652858f92d 15 pc_.format(); // default: 8 bits, nonparity, 1 stop bit
MikamiUitOpen 0:6b652858f92d 16 pc_.attach(callback(this, &SerialRxTxIntr::RxIsr));
MikamiUitOpen 0:6b652858f92d 17 }
MikamiUitOpen 0:6b652858f92d 18
MikamiUitOpen 0:6b652858f92d 19 // メッセージの終了であればそのメッセージを保存し true を返す
MikamiUitOpen 0:6b652858f92d 20 bool SerialRxTxIntr::IsEol()
MikamiUitOpen 0:6b652858f92d 21 {
MikamiUitOpen 0:6b652858f92d 22 if (!eol_) return false;
MikamiUitOpen 0:6b652858f92d 23
MikamiUitOpen 0:6b652858f92d 24 eol_ = false;
MikamiUitOpen 0:6b652858f92d 25 buffer2_ = rxBuffer_; // メッセージの保存
MikamiUitOpen 0:6b652858f92d 26 rxBuffer_ = ""; // 受信バッファをクリア
MikamiUitOpen 0:6b652858f92d 27 return true;
MikamiUitOpen 0:6b652858f92d 28 }
MikamiUitOpen 0:6b652858f92d 29
MikamiUitOpen 0:6b652858f92d 30 void SerialRxTxIntr::Tx(string str)
MikamiUitOpen 0:6b652858f92d 31 {
MikamiUitOpen 0:6b652858f92d 32 for (int n=0; n<str.size(); n++)
MikamiUitOpen 0:6b652858f92d 33 tx_.TxWrite(str[n]);
MikamiUitOpen 0:6b652858f92d 34 tx_.TxWrite('\n');
MikamiUitOpen 0:6b652858f92d 35
MikamiUitOpen 0:6b652858f92d 36 }
MikamiUitOpen 0:6b652858f92d 37
MikamiUitOpen 0:6b652858f92d 38 // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン
MikamiUitOpen 0:6b652858f92d 39 void SerialRxTxIntr::RxIsr()
MikamiUitOpen 0:6b652858f92d 40 {
MikamiUitOpen 0:6b652858f92d 41 unsigned char chr = pc_.getc();
MikamiUitOpen 1:09c07078126f 42 tx_.TxWrite(chr); // エコー・バック
MikamiUitOpen 1:09c07078126f 43 if (chr == '\r') tx_.TxWrite('\n');
MikamiUitOpen 1:09c07078126f 44
MikamiUitOpen 0:6b652858f92d 45 // "\r" を受信した場合はメッセージの終了とする
MikamiUitOpen 0:6b652858f92d 46 // "\r" は rxBuffer_ に追加されない
MikamiUitOpen 0:6b652858f92d 47 if (chr == '\r') eol_ = true;
MikamiUitOpen 0:6b652858f92d 48 else rxBuffer_ += chr;
MikamiUitOpen 0:6b652858f92d 49
MikamiUitOpen 0:6b652858f92d 50 // 受信するメッセージの文字数のチェック
MikamiUitOpen 0:6b652858f92d 51 if (rxBuffer_.size() > rxMax_)
MikamiUitOpen 0:6b652858f92d 52 {
MikamiUitOpen 0:6b652858f92d 53 // 文字数オーバーの処理,ボードの LED を高速に点滅する
MikamiUitOpen 0:6b652858f92d 54 DigitalOut myLed(LED1);
MikamiUitOpen 0:6b652858f92d 55 while (true)
MikamiUitOpen 0:6b652858f92d 56 {
MikamiUitOpen 0:6b652858f92d 57 myLed = !myLed;
MikamiUitOpen 0:6b652858f92d 58 wait_ms(50);
MikamiUitOpen 0:6b652858f92d 59 }
MikamiUitOpen 0:6b652858f92d 60 }
MikamiUitOpen 0:6b652858f92d 61 }
MikamiUitOpen 0:6b652858f92d 62
MikamiUitOpen 0:6b652858f92d 63 // static メンバの実体の宣言/初期化
MikamiUitOpen 0:6b652858f92d 64 int SerialRxTxIntr::rxMax_;
MikamiUitOpen 0:6b652858f92d 65 __IO bool SerialRxTxIntr::eol_ = false;
MikamiUitOpen 0:6b652858f92d 66 string SerialRxTxIntr::rxBuffer_ = "";