Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialRxTxIntr.cpp@1:09c07078126f, 2018-07-09 (annotated)
- 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?
User | Revision | Line number | New 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_ = ""; |