STM32F446内蔵のADC, DAC を 2 チャンネルで使うためのライブラリの使用例. Example program of library for build-in ADC and DAC in STM32F446 using with dual channels.
Dependencies: mbed SerialTxRxIntr DSP_ADDA_Dual
main.cpp@3:711a072f2898, 2021-06-29 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Tue Jun 29 01:05:06 2021 +0000
- Revision:
- 3:711a072f2898
- Parent:
- 2:1bbea6a4a5b2
4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:c370b7c5a6ad | 1 | //---------------------------------------------------------------------- |
MikamiUitOpen | 0:c370b7c5a6ad | 2 | // NUCLEO-F446 で STM32F446 内蔵の ADC, DAC のためのクラスのデモプログラム |
MikamiUitOpen | 0:c370b7c5a6ad | 3 | // 使用するクラス:DspAdcDual_Polling, DspDacDual, DspAdcDual_Intr |
MikamiUitOpen | 0:c370b7c5a6ad | 4 | // 処理の内容:AD 変換器からの入力をそのまま DA 変換器に出力する |
MikamiUitOpen | 0:c370b7c5a6ad | 5 | // ポーリング方式と割り込み方式の2つの例を示す |
MikamiUitOpen | 0:c370b7c5a6ad | 6 | // |
MikamiUitOpen | 3:711a072f2898 | 7 | // 割り込み方式では標本化周波数を PC のターミナル・ソフトで変更できる |
MikamiUitOpen | 3:711a072f2898 | 8 | // |
MikamiUitOpen | 3:711a072f2898 | 9 | // 2021/06/29, Copyright (c) 2021 MIKAMI, Naoki |
MikamiUitOpen | 0:c370b7c5a6ad | 10 | //---------------------------------------------------------------------- |
MikamiUitOpen | 0:c370b7c5a6ad | 11 | |
MikamiUitOpen | 0:c370b7c5a6ad | 12 | #include "DSP_DacDual.hpp" |
MikamiUitOpen | 1:eb4a0b916723 | 13 | #include "SerialRxTxIntr.hpp" |
MikamiUitOpen | 1:eb4a0b916723 | 14 | #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため |
MikamiUitOpen | 1:eb4a0b916723 | 15 | using namespace Mikami; |
MikamiUitOpen | 1:eb4a0b916723 | 16 | |
MikamiUitOpen | 3:711a072f2898 | 17 | // ポーリングの例を有効にする場合,次の #define 文を無効にすること |
MikamiUitOpen | 3:711a072f2898 | 18 | #define ADC_EXAMPLE_OF_INTERRUPT |
MikamiUitOpen | 0:c370b7c5a6ad | 19 | |
MikamiUitOpen | 0:c370b7c5a6ad | 20 | //---------------------------------------------------------------- |
MikamiUitOpen | 0:c370b7c5a6ad | 21 | // ポーリングを使う例 |
MikamiUitOpen | 0:c370b7c5a6ad | 22 | #ifndef ADC_EXAMPLE_OF_INTERRUPT |
MikamiUitOpen | 0:c370b7c5a6ad | 23 | #include "DSP_AdcDualPolling.hpp" |
MikamiUitOpen | 0:c370b7c5a6ad | 24 | |
MikamiUitOpen | 0:c370b7c5a6ad | 25 | int main() |
MikamiUitOpen | 0:c370b7c5a6ad | 26 | { |
MikamiUitOpen | 0:c370b7c5a6ad | 27 | const float FS = 10; // 標本化周波数: 10 kHz |
MikamiUitOpen | 0:c370b7c5a6ad | 28 | DspAdcDualPolling myAdc(FS, A0, A1); |
MikamiUitOpen | 0:c370b7c5a6ad | 29 | DspDacDual myDac; |
MikamiUitOpen | 0:c370b7c5a6ad | 30 | |
MikamiUitOpen | 1:eb4a0b916723 | 31 | printf("\r\nポーリング方式\r\n"); |
MikamiUitOpen | 0:c370b7c5a6ad | 32 | while (true) |
MikamiUitOpen | 0:c370b7c5a6ad | 33 | { |
MikamiUitOpen | 0:c370b7c5a6ad | 34 | // float 型の例 |
MikamiUitOpen | 0:c370b7c5a6ad | 35 | float sn1, sn2; |
MikamiUitOpen | 0:c370b7c5a6ad | 36 | myAdc.Read(sn1, sn2); |
MikamiUitOpen | 0:c370b7c5a6ad | 37 | myDac.Write(sn1, sn2); |
MikamiUitOpen | 0:c370b7c5a6ad | 38 | } |
MikamiUitOpen | 0:c370b7c5a6ad | 39 | } |
MikamiUitOpen | 0:c370b7c5a6ad | 40 | |
MikamiUitOpen | 0:c370b7c5a6ad | 41 | //---------------------------------------------------------------- |
MikamiUitOpen | 0:c370b7c5a6ad | 42 | // ADC 変換終了割り込みを使う例 |
MikamiUitOpen | 0:c370b7c5a6ad | 43 | #else |
MikamiUitOpen | 0:c370b7c5a6ad | 44 | #include "DSP_AdcDualIntr.hpp" |
MikamiUitOpen | 0:c370b7c5a6ad | 45 | |
MikamiUitOpen | 0:c370b7c5a6ad | 46 | const float FS = 10; // 標本化周波数: 10 kHz |
MikamiUitOpen | 0:c370b7c5a6ad | 47 | DspAdcDualIntr myAdc_(FS, A0, A1); |
MikamiUitOpen | 0:c370b7c5a6ad | 48 | DspDacDual myDac_; |
MikamiUitOpen | 0:c370b7c5a6ad | 49 | |
MikamiUitOpen | 0:c370b7c5a6ad | 50 | // ADC 変換終了割り込みに対する割り込みサービス・ルーチン |
MikamiUitOpen | 0:c370b7c5a6ad | 51 | void AdcIsr() |
MikamiUitOpen | 0:c370b7c5a6ad | 52 | { |
MikamiUitOpen | 0:c370b7c5a6ad | 53 | float sn1, sn2; |
MikamiUitOpen | 0:c370b7c5a6ad | 54 | myAdc_.Read(sn1, sn2); |
MikamiUitOpen | 0:c370b7c5a6ad | 55 | myDac_.Write(sn1, sn2); |
MikamiUitOpen | 0:c370b7c5a6ad | 56 | } |
MikamiUitOpen | 0:c370b7c5a6ad | 57 | |
MikamiUitOpen | 0:c370b7c5a6ad | 58 | int main() |
MikamiUitOpen | 0:c370b7c5a6ad | 59 | { |
MikamiUitOpen | 1:eb4a0b916723 | 60 | printf("\r\n割り込み方式\r\n"); |
MikamiUitOpen | 1:eb4a0b916723 | 61 | printf("起動時の標本化周波数: 10 kHz, 標本化周波数を変更できます\r\n"); |
MikamiUitOpen | 3:711a072f2898 | 62 | SerialRxTxIntr rxTx; // Serial クラスの受送信割込み用オブジェクト |
MikamiUitOpen | 1:eb4a0b916723 | 63 | rxTx.EchobackEnable(); |
MikamiUitOpen | 0:c370b7c5a6ad | 64 | |
MikamiUitOpen | 0:c370b7c5a6ad | 65 | myAdc_.SetIntrVec(&AdcIsr); |
MikamiUitOpen | 3:711a072f2898 | 66 | myAdc_.DisableIntr(); // 一旦,AD 変換k終了割り込みを禁止する |
MikamiUitOpen | 3:711a072f2898 | 67 | printf("Enter キーを押すと開始します\r\n"); |
MikamiUitOpen | 3:711a072f2898 | 68 | while (!rxTx.IsEol()) {} |
MikamiUitOpen | 3:711a072f2898 | 69 | myAdc_.EnableIntr(); // AD 変換k終了割り込みを許可する |
MikamiUitOpen | 0:c370b7c5a6ad | 70 | |
MikamiUitOpen | 1:eb4a0b916723 | 71 | rxTx.TxString("標本化周波数 [kHz] ? "); |
MikamiUitOpen | 0:c370b7c5a6ad | 72 | while (true) |
MikamiUitOpen | 0:c370b7c5a6ad | 73 | { |
MikamiUitOpen | 1:eb4a0b916723 | 74 | if (rxTx.IsEol()) |
MikamiUitOpen | 1:eb4a0b916723 | 75 | { |
MikamiUitOpen | 1:eb4a0b916723 | 76 | string str = rxTx.GetBuffer(); |
MikamiUitOpen | 1:eb4a0b916723 | 77 | float fS = atof(str.c_str()); |
MikamiUitOpen | 1:eb4a0b916723 | 78 | myAdc_.SetFs(fS); |
MikamiUitOpen | 1:eb4a0b916723 | 79 | rxTx.TxString("標本化周波数 [kHz] ? "); |
MikamiUitOpen | 1:eb4a0b916723 | 80 | } |
MikamiUitOpen | 0:c370b7c5a6ad | 81 | } |
MikamiUitOpen | 0:c370b7c5a6ad | 82 | } |
MikamiUitOpen | 0:c370b7c5a6ad | 83 | #endif |