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-10-07
- Revision:
- 7:190d94fba10d
- Parent:
- 6:8084247806a4
- Child:
- 8:8f6e9351f313
File content as of revision 7:190d94fba10d:
//------------------------------------------------------------- // Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで // 複数のキャラクタ受送信をサポ-トするクラス // // 2018/10/06, Copyright (c) 2018 MIKAMI, Naoki //------------------------------------------------------------- #include "SerialRxTxIntr.hpp" namespace Mikami { // コンストラクタ SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud) : pc_(USBTX, USBRX, baud), tx_(pc_), RX_MAX_(maxChar), eol_(false), rxBuffer_(""), buffer2_(""), echoOn_(false) { 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::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() > RX_MAX_) { // 文字数オーバーの処理,ボードの LED を高速に点滅する DigitalOut myLed(LED1); while (true) { myLed = !myLed; wait_ms(50); } } } }