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
- Committer:
- MikamiUitOpen
- Date:
- 2020-09-23
- Revision:
- 1:eb4a0b916723
- Parent:
- 0:c370b7c5a6ad
- Child:
- 2:1bbea6a4a5b2
File content as of revision 1:eb4a0b916723:
//---------------------------------------------------------------------- // NUCLEO-F446 で STM32F446 内蔵の ADC, DAC のためのクラスのデモプログラム // 使用するクラス:DspAdcDual_Polling, DspDacDual, DspAdcDual_Intr // 処理の内容:AD 変換器からの入力をそのまま DA 変換器に出力する // ポーリング方式と割り込み方式の2つの例を示す // // 2020/09/23, Copyright (c) 2020 MIKAMI, Naoki //---------------------------------------------------------------------- #include "DSP_DacDual.hpp" #include "SerialRxTxIntr.hpp" #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため using namespace Mikami; // 割り込みの例を有効にする場合,次の #define 文を有効にすること //#define ADC_EXAMPLE_OF_INTERRUPT //---------------------------------------------------------------- // ポーリングを使う例 #ifndef ADC_EXAMPLE_OF_INTERRUPT #include "DSP_AdcDualPolling.hpp" int main() { const float FS = 10; // 標本化周波数: 10 kHz DspAdcDualPolling myAdc(FS, A0, A1); DspDacDual myDac; printf("\r\nポーリング方式\r\n"); while (true) { // float 型の例 float sn1, sn2; myAdc.Read(sn1, sn2); myDac.Write(sn1, sn2); } } //---------------------------------------------------------------- // ADC 変換終了割り込みを使う例 #else #include "DSP_AdcDualIntr.hpp" const float FS = 10; // 標本化周波数: 10 kHz DspAdcDualIntr myAdc_(FS, A0, A1); DspDacDual myDac_; // ADC 変換終了割り込みに対する割り込みサービス・ルーチン void AdcIsr() { float sn1, sn2; myAdc_.Read(sn1, sn2); myDac_.Write(sn1, sn2); } int main() { printf("\r\n割り込み方式\r\n"); printf("起動時の標本化周波数: 10 kHz, 標本化周波数を変更できます\r\n"); SerialRxTxIntr rxTx; // Serial クラスの受送信割込み用オブジェクト rxTx.EchobackEnable(); myAdc_.SetIntrVec(&AdcIsr); rxTx.TxString("標本化周波数 [kHz] ? "); while (true) { if (rxTx.IsEol()) { string str = rxTx.GetBuffer(); float fS = atof(str.c_str()); myAdc_.SetFs(fS); rxTx.TxString("標本化周波数 [kHz] ? "); } } } #endif