オシロスコープ. このプログラムの説明は,CQ出版社「トランジスタ技術」の2021年10月号から開始された連載記事「STM32マイコンではじめるPC計測」の中にあります.このプログラムといっしょに使うPC側のプログラムについても同誌を参照してください.
Dependencies: Array_Matrix mbed SerialTxRxIntr DSP_ADDA_Dual
main.cpp@0:4440ad009afe, 2021-09-09 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Thu Sep 09 08:47:03 2021 +0000
- Revision:
- 0:4440ad009afe
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:4440ad009afe | 1 | //--------------------------------------------------------------------- |
MikamiUitOpen | 0:4440ad009afe | 2 | // オシロスコープ (Nucleo-F446RE 用) |
MikamiUitOpen | 0:4440ad009afe | 3 | // ● 入力 A0: チャンネル1,A1 チャンネル2 |
MikamiUitOpen | 0:4440ad009afe | 4 | // |
MikamiUitOpen | 0:4440ad009afe | 5 | // 2021/07/19, Copyright (c) 2021 MIKAMI, Naoki |
MikamiUitOpen | 0:4440ad009afe | 6 | //--------------------------------------------------------------------- |
MikamiUitOpen | 0:4440ad009afe | 7 | |
MikamiUitOpen | 0:4440ad009afe | 8 | #include <string> |
MikamiUitOpen | 0:4440ad009afe | 9 | #include "DSP_AdcDualIntr.hpp" |
MikamiUitOpen | 0:4440ad009afe | 10 | #include "InputBuffer.hpp" |
MikamiUitOpen | 0:4440ad009afe | 11 | #include "XferWaveform.hpp" |
MikamiUitOpen | 0:4440ad009afe | 12 | using namespace Mikami; |
MikamiUitOpen | 0:4440ad009afe | 13 | |
MikamiUitOpen | 0:4440ad009afe | 14 | #ifndef __STM32F446xx_H |
MikamiUitOpen | 0:4440ad009afe | 15 | #error "Use Nucleo-F446RE" |
MikamiUitOpen | 0:4440ad009afe | 16 | #endif |
MikamiUitOpen | 0:4440ad009afe | 17 | |
MikamiUitOpen | 0:4440ad009afe | 18 | const int N_FRAME_ = 1000; // 1フレーム当たり標本化するデータ数 |
MikamiUitOpen | 0:4440ad009afe | 19 | |
MikamiUitOpen | 0:4440ad009afe | 20 | DspAdcDualIntr myAdc_(100, A0, A1); |
MikamiUitOpen | 0:4440ad009afe | 21 | InputBuffer buf_(N_FRAME_); // AD の結果を保存するバッファ |
MikamiUitOpen | 0:4440ad009afe | 22 | |
MikamiUitOpen | 0:4440ad009afe | 23 | // ADC 変換終了割り込みに対する割り込みサービス・ルーチン |
MikamiUitOpen | 0:4440ad009afe | 24 | void AdcIsr() |
MikamiUitOpen | 0:4440ad009afe | 25 | { |
MikamiUitOpen | 0:4440ad009afe | 26 | float sn1, sn2; |
MikamiUitOpen | 0:4440ad009afe | 27 | myAdc_.Read(sn1, sn2); |
MikamiUitOpen | 0:4440ad009afe | 28 | buf_.Store(sn1, sn2); // バッファへ格納 |
MikamiUitOpen | 0:4440ad009afe | 29 | if (buf_.IsFullNext()) // バッファが満杯になったら ADC 割り込みを禁止する |
MikamiUitOpen | 0:4440ad009afe | 30 | myAdc_.DisableIntr(); |
MikamiUitOpen | 0:4440ad009afe | 31 | } |
MikamiUitOpen | 0:4440ad009afe | 32 | |
MikamiUitOpen | 0:4440ad009afe | 33 | int main() |
MikamiUitOpen | 0:4440ad009afe | 34 | { |
MikamiUitOpen | 0:4440ad009afe | 35 | SerialRxTxIntr rxTx; // PC との通信用,最初は 9600 baud |
MikamiUitOpen | 0:4440ad009afe | 36 | XferWaveform tx(rxTx, 2*N_FRAME_); // PC に転送するためのオブジェクトの生成 |
MikamiUitOpen | 0:4440ad009afe | 37 | |
MikamiUitOpen | 0:4440ad009afe | 38 | myAdc_.SetIntrVec(&AdcIsr); // AD変換終了割り込みの割り当て |
MikamiUitOpen | 0:4440ad009afe | 39 | myAdc_.DisableIntr(); |
MikamiUitOpen | 0:4440ad009afe | 40 | while (true) |
MikamiUitOpen | 0:4440ad009afe | 41 | { |
MikamiUitOpen | 0:4440ad009afe | 42 | // PC からのコマンドの解析 |
MikamiUitOpen | 0:4440ad009afe | 43 | if (rxTx.IsEol()) // 受信バッファのデータが有効になった場合の処理 |
MikamiUitOpen | 0:4440ad009afe | 44 | { |
MikamiUitOpen | 0:4440ad009afe | 45 | string str = rxTx.GetBuffer(); |
MikamiUitOpen | 0:4440ad009afe | 46 | if (str == "Oscilloscope") |
MikamiUitOpen | 0:4440ad009afe | 47 | { |
MikamiUitOpen | 0:4440ad009afe | 48 | rxTx.TxString("ACK\n"); // PC からの "Oscilloscope" 受信に対して"ACK" を送信 |
MikamiUitOpen | 0:4440ad009afe | 49 | wait_ms(10); |
MikamiUitOpen | 0:4440ad009afe | 50 | rxTx.Baud(460800); // 以降は 460,800 baud |
MikamiUitOpen | 0:4440ad009afe | 51 | } |
MikamiUitOpen | 0:4440ad009afe | 52 | else if (str.substr(0, 2) == "GO") |
MikamiUitOpen | 0:4440ad009afe | 53 | { |
MikamiUitOpen | 0:4440ad009afe | 54 | // str の [2..5] の内容:標本化周波数 |
MikamiUitOpen | 0:4440ad009afe | 55 | int fs = atoi(str.substr(2, 4).c_str()); // 標本化周波数 |
MikamiUitOpen | 0:4440ad009afe | 56 | myAdc_.SetFs(fs); // 標本化周波数再設定 |
MikamiUitOpen | 0:4440ad009afe | 57 | myAdc_.EnableIntr(); // ADC 割り込みを有効にする |
MikamiUitOpen | 0:4440ad009afe | 58 | } |
MikamiUitOpen | 0:4440ad009afe | 59 | } |
MikamiUitOpen | 0:4440ad009afe | 60 | |
MikamiUitOpen | 0:4440ad009afe | 61 | if (buf_.IsFull()) |
MikamiUitOpen | 0:4440ad009afe | 62 | tx.ToPC(buf_.Get()); // データを PC へ転送 |
MikamiUitOpen | 0:4440ad009afe | 63 | } |
MikamiUitOpen | 0:4440ad009afe | 64 | } |