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:
Wed Sep 23 01:50:18 2020 +0000
Revision:
1:eb4a0b916723
Parent:
0:c370b7c5a6ad
Child:
2:1bbea6a4a5b2
2

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 1:eb4a0b916723 7 // 2020/09/23, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:c370b7c5a6ad 8 //----------------------------------------------------------------------
MikamiUitOpen 0:c370b7c5a6ad 9
MikamiUitOpen 0:c370b7c5a6ad 10 #include "DSP_DacDual.hpp"
MikamiUitOpen 1:eb4a0b916723 11 #include "SerialRxTxIntr.hpp"
MikamiUitOpen 1:eb4a0b916723 12 #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため
MikamiUitOpen 1:eb4a0b916723 13 using namespace Mikami;
MikamiUitOpen 1:eb4a0b916723 14
MikamiUitOpen 0:c370b7c5a6ad 15 // 割り込みの例を有効にする場合,次の #define 文を有効にすること
MikamiUitOpen 1:eb4a0b916723 16 //#define ADC_EXAMPLE_OF_INTERRUPT
MikamiUitOpen 0:c370b7c5a6ad 17
MikamiUitOpen 0:c370b7c5a6ad 18 //----------------------------------------------------------------
MikamiUitOpen 0:c370b7c5a6ad 19 // ポーリングを使う例
MikamiUitOpen 0:c370b7c5a6ad 20 #ifndef ADC_EXAMPLE_OF_INTERRUPT
MikamiUitOpen 0:c370b7c5a6ad 21 #include "DSP_AdcDualPolling.hpp"
MikamiUitOpen 0:c370b7c5a6ad 22
MikamiUitOpen 0:c370b7c5a6ad 23 int main()
MikamiUitOpen 0:c370b7c5a6ad 24 {
MikamiUitOpen 0:c370b7c5a6ad 25 const float FS = 10; // 標本化周波数: 10 kHz
MikamiUitOpen 0:c370b7c5a6ad 26 DspAdcDualPolling myAdc(FS, A0, A1);
MikamiUitOpen 0:c370b7c5a6ad 27 DspDacDual myDac;
MikamiUitOpen 0:c370b7c5a6ad 28
MikamiUitOpen 1:eb4a0b916723 29 printf("\r\nポーリング方式\r\n");
MikamiUitOpen 0:c370b7c5a6ad 30 while (true)
MikamiUitOpen 0:c370b7c5a6ad 31 {
MikamiUitOpen 0:c370b7c5a6ad 32 // float 型の例
MikamiUitOpen 0:c370b7c5a6ad 33 float sn1, sn2;
MikamiUitOpen 0:c370b7c5a6ad 34 myAdc.Read(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 35 myDac.Write(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 36 }
MikamiUitOpen 0:c370b7c5a6ad 37 }
MikamiUitOpen 0:c370b7c5a6ad 38
MikamiUitOpen 0:c370b7c5a6ad 39 //----------------------------------------------------------------
MikamiUitOpen 0:c370b7c5a6ad 40 // ADC 変換終了割り込みを使う例
MikamiUitOpen 0:c370b7c5a6ad 41 #else
MikamiUitOpen 0:c370b7c5a6ad 42 #include "DSP_AdcDualIntr.hpp"
MikamiUitOpen 0:c370b7c5a6ad 43
MikamiUitOpen 0:c370b7c5a6ad 44 const float FS = 10; // 標本化周波数: 10 kHz
MikamiUitOpen 0:c370b7c5a6ad 45 DspAdcDualIntr myAdc_(FS, A0, A1);
MikamiUitOpen 0:c370b7c5a6ad 46 DspDacDual myDac_;
MikamiUitOpen 0:c370b7c5a6ad 47
MikamiUitOpen 0:c370b7c5a6ad 48 // ADC 変換終了割り込みに対する割り込みサービス・ルーチン
MikamiUitOpen 0:c370b7c5a6ad 49 void AdcIsr()
MikamiUitOpen 0:c370b7c5a6ad 50 {
MikamiUitOpen 0:c370b7c5a6ad 51 float sn1, sn2;
MikamiUitOpen 0:c370b7c5a6ad 52 myAdc_.Read(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 53 myDac_.Write(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 54 }
MikamiUitOpen 0:c370b7c5a6ad 55
MikamiUitOpen 0:c370b7c5a6ad 56 int main()
MikamiUitOpen 0:c370b7c5a6ad 57 {
MikamiUitOpen 1:eb4a0b916723 58 printf("\r\n割り込み方式\r\n");
MikamiUitOpen 1:eb4a0b916723 59 printf("起動時の標本化周波数: 10 kHz, 標本化周波数を変更できます\r\n");
MikamiUitOpen 1:eb4a0b916723 60 SerialRxTxIntr rxTx; // Serial クラスの受送信割込み用オブジェクト
MikamiUitOpen 1:eb4a0b916723 61 rxTx.EchobackEnable();
MikamiUitOpen 0:c370b7c5a6ad 62
MikamiUitOpen 0:c370b7c5a6ad 63 myAdc_.SetIntrVec(&AdcIsr);
MikamiUitOpen 0:c370b7c5a6ad 64
MikamiUitOpen 1:eb4a0b916723 65 rxTx.TxString("標本化周波数 [kHz] ? ");
MikamiUitOpen 0:c370b7c5a6ad 66 while (true)
MikamiUitOpen 0:c370b7c5a6ad 67 {
MikamiUitOpen 1:eb4a0b916723 68 if (rxTx.IsEol())
MikamiUitOpen 1:eb4a0b916723 69 {
MikamiUitOpen 1:eb4a0b916723 70 string str = rxTx.GetBuffer();
MikamiUitOpen 1:eb4a0b916723 71 float fS = atof(str.c_str());
MikamiUitOpen 1:eb4a0b916723 72 myAdc_.SetFs(fS);
MikamiUitOpen 1:eb4a0b916723 73 rxTx.TxString("標本化周波数 [kHz] ? ");
MikamiUitOpen 1:eb4a0b916723 74 }
MikamiUitOpen 0:c370b7c5a6ad 75 }
MikamiUitOpen 0:c370b7c5a6ad 76 }
MikamiUitOpen 0:c370b7c5a6ad 77 #endif