Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialRxTxIntr.cpp@3:63d7bf321ba2, 2018-09-07 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Sep 07 12:55:52 2018 +0000
- Revision:
- 3:63d7bf321ba2
- Parent:
- 2:f6e15c19dd75
- Child:
- 4:fb847a82f735
4
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 | 3:63d7bf321ba2 | 5 | // 2018/09/07, 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 | 2:f6e15c19dd75 | 12 | : pc_(USBTX, USBRX, baud), tx_(pc_), buffer2_(""), echoOn_(false) |
| 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 | 2:f6e15c19dd75 | 30 | // 文字列の送信 |
| MikamiUitOpen | 3:63d7bf321ba2 | 31 | // lf が false の場合は,最後に '\n' を送信しない |
| MikamiUitOpen | 3:63d7bf321ba2 | 32 | void SerialRxTxIntr::Tx(string str, bool lf) |
| MikamiUitOpen | 0:6b652858f92d | 33 | { |
| MikamiUitOpen | 0:6b652858f92d | 34 | for (int n=0; n<str.size(); n++) |
| MikamiUitOpen | 0:6b652858f92d | 35 | tx_.TxWrite(str[n]); |
| MikamiUitOpen | 3:63d7bf321ba2 | 36 | if (lf) tx_.TxWrite('\n'); |
| MikamiUitOpen | 0:6b652858f92d | 37 | } |
| MikamiUitOpen | 0:6b652858f92d | 38 | |
| MikamiUitOpen | 0:6b652858f92d | 39 | // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン |
| MikamiUitOpen | 0:6b652858f92d | 40 | void SerialRxTxIntr::RxIsr() |
| MikamiUitOpen | 0:6b652858f92d | 41 | { |
| MikamiUitOpen | 0:6b652858f92d | 42 | unsigned char chr = pc_.getc(); |
| MikamiUitOpen | 2:f6e15c19dd75 | 43 | if (echoOn_) // エコーバックが有効な場合 |
| MikamiUitOpen | 2:f6e15c19dd75 | 44 | { |
| MikamiUitOpen | 2:f6e15c19dd75 | 45 | tx_.TxWrite(chr); // エコーバック |
| MikamiUitOpen | 2:f6e15c19dd75 | 46 | if (chr == '\r') tx_.TxWrite('\n'); |
| MikamiUitOpen | 2:f6e15c19dd75 | 47 | } |
| MikamiUitOpen | 0:6b652858f92d | 48 | // "\r" を受信した場合はメッセージの終了とする |
| MikamiUitOpen | 0:6b652858f92d | 49 | // "\r" は rxBuffer_ に追加されない |
| MikamiUitOpen | 0:6b652858f92d | 50 | if (chr == '\r') eol_ = true; |
| MikamiUitOpen | 0:6b652858f92d | 51 | else rxBuffer_ += chr; |
| MikamiUitOpen | 0:6b652858f92d | 52 | |
| MikamiUitOpen | 0:6b652858f92d | 53 | // 受信するメッセージの文字数のチェック |
| MikamiUitOpen | 0:6b652858f92d | 54 | if (rxBuffer_.size() > rxMax_) |
| MikamiUitOpen | 0:6b652858f92d | 55 | { |
| MikamiUitOpen | 0:6b652858f92d | 56 | // 文字数オーバーの処理,ボードの LED を高速に点滅する |
| MikamiUitOpen | 0:6b652858f92d | 57 | DigitalOut myLed(LED1); |
| MikamiUitOpen | 0:6b652858f92d | 58 | while (true) |
| MikamiUitOpen | 0:6b652858f92d | 59 | { |
| MikamiUitOpen | 0:6b652858f92d | 60 | myLed = !myLed; |
| MikamiUitOpen | 0:6b652858f92d | 61 | wait_ms(50); |
| MikamiUitOpen | 0:6b652858f92d | 62 | } |
| MikamiUitOpen | 0:6b652858f92d | 63 | } |
| MikamiUitOpen | 0:6b652858f92d | 64 | } |
| MikamiUitOpen | 0:6b652858f92d | 65 | |
| MikamiUitOpen | 0:6b652858f92d | 66 | // static メンバの実体の宣言/初期化 |
| MikamiUitOpen | 0:6b652858f92d | 67 | int SerialRxTxIntr::rxMax_; |
| MikamiUitOpen | 0:6b652858f92d | 68 | __IO bool SerialRxTxIntr::eol_ = false; |
| MikamiUitOpen | 0:6b652858f92d | 69 | string SerialRxTxIntr::rxBuffer_ = ""; |
| MikamiUitOpen | 3:63d7bf321ba2 | 70 |