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 Sep 22 04:53:59 2020 +0000
Revision:
0:c370b7c5a6ad
Child:
1:eb4a0b916723
1

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 0:c370b7c5a6ad 7 // 2020/09/22, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:c370b7c5a6ad 8 //----------------------------------------------------------------------
MikamiUitOpen 0:c370b7c5a6ad 9
MikamiUitOpen 0:c370b7c5a6ad 10 #include "DSP_DacDual.hpp"
MikamiUitOpen 0:c370b7c5a6ad 11 // 割り込みの例を有効にする場合,次の #define 文を有効にすること
MikamiUitOpen 0:c370b7c5a6ad 12 #define ADC_EXAMPLE_OF_INTERRUPT
MikamiUitOpen 0:c370b7c5a6ad 13
MikamiUitOpen 0:c370b7c5a6ad 14 //----------------------------------------------------------------
MikamiUitOpen 0:c370b7c5a6ad 15 // ポーリングを使う例
MikamiUitOpen 0:c370b7c5a6ad 16 #ifndef ADC_EXAMPLE_OF_INTERRUPT
MikamiUitOpen 0:c370b7c5a6ad 17 #include "DSP_AdcDualPolling.hpp"
MikamiUitOpen 0:c370b7c5a6ad 18 using namespace Mikami;
MikamiUitOpen 0:c370b7c5a6ad 19
MikamiUitOpen 0:c370b7c5a6ad 20 int main()
MikamiUitOpen 0:c370b7c5a6ad 21 {
MikamiUitOpen 0:c370b7c5a6ad 22 const float FS = 10; // 標本化周波数: 10 kHz
MikamiUitOpen 0:c370b7c5a6ad 23 DspAdcDualPolling myAdc(FS, A0, A1);
MikamiUitOpen 0:c370b7c5a6ad 24 DspDacDual myDac;
MikamiUitOpen 0:c370b7c5a6ad 25
MikamiUitOpen 0:c370b7c5a6ad 26 printf("\r\nUsing polling\r\n");
MikamiUitOpen 0:c370b7c5a6ad 27 while (true)
MikamiUitOpen 0:c370b7c5a6ad 28 {
MikamiUitOpen 0:c370b7c5a6ad 29 // float 型の例
MikamiUitOpen 0:c370b7c5a6ad 30 float sn1, sn2;
MikamiUitOpen 0:c370b7c5a6ad 31 myAdc.Read(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 32 myDac.Write(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 33 }
MikamiUitOpen 0:c370b7c5a6ad 34 }
MikamiUitOpen 0:c370b7c5a6ad 35
MikamiUitOpen 0:c370b7c5a6ad 36 //----------------------------------------------------------------
MikamiUitOpen 0:c370b7c5a6ad 37 // ADC 変換終了割り込みを使う例
MikamiUitOpen 0:c370b7c5a6ad 38 #else
MikamiUitOpen 0:c370b7c5a6ad 39 #include "DSP_AdcDualIntr.hpp"
MikamiUitOpen 0:c370b7c5a6ad 40 using namespace Mikami;
MikamiUitOpen 0:c370b7c5a6ad 41
MikamiUitOpen 0:c370b7c5a6ad 42 const float FS = 10; // 標本化周波数: 10 kHz
MikamiUitOpen 0:c370b7c5a6ad 43 DspAdcDualIntr myAdc_(FS, A0, A1);
MikamiUitOpen 0:c370b7c5a6ad 44 DspDacDual myDac_;
MikamiUitOpen 0:c370b7c5a6ad 45
MikamiUitOpen 0:c370b7c5a6ad 46 // ADC 変換終了割り込みに対する割り込みサービス・ルーチン
MikamiUitOpen 0:c370b7c5a6ad 47 void AdcIsr()
MikamiUitOpen 0:c370b7c5a6ad 48 {
MikamiUitOpen 0:c370b7c5a6ad 49 float sn1, sn2;
MikamiUitOpen 0:c370b7c5a6ad 50 myAdc_.Read(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 51 myDac_.Write(sn1, sn2);
MikamiUitOpen 0:c370b7c5a6ad 52 }
MikamiUitOpen 0:c370b7c5a6ad 53
MikamiUitOpen 0:c370b7c5a6ad 54 int main()
MikamiUitOpen 0:c370b7c5a6ad 55 {
MikamiUitOpen 0:c370b7c5a6ad 56 printf("\r\nUsing interrupt\r\n");
MikamiUitOpen 0:c370b7c5a6ad 57
MikamiUitOpen 0:c370b7c5a6ad 58 myAdc_.SetIntrVec(&AdcIsr);
MikamiUitOpen 0:c370b7c5a6ad 59
MikamiUitOpen 0:c370b7c5a6ad 60 uint32_t n = 0;
MikamiUitOpen 0:c370b7c5a6ad 61 while (true)
MikamiUitOpen 0:c370b7c5a6ad 62 {
MikamiUitOpen 0:c370b7c5a6ad 63 printf("%d\r\n", n++);
MikamiUitOpen 0:c370b7c5a6ad 64 wait(1);
MikamiUitOpen 0:c370b7c5a6ad 65 }
MikamiUitOpen 0:c370b7c5a6ad 66 }
MikamiUitOpen 0:c370b7c5a6ad 67 #endif