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

Committer:
MikamiUitOpen
Date:
Tue Jun 29 01:05:06 2021 +0000
Revision:
3:711a072f2898
Parent:
2:1bbea6a4a5b2
4

Who changed what in which revision?

UserRevisionLine numberNew 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