STM32F446 の内蔵 ADC, DAC を 2 チャンネルで使うためのライブラリ.このライブラリを登録した際のプログラム: Demo_DSP_ADDA_Dual. Library for build-in ADC and DAC in STM32F446 using with dual channels.

Dependents:   F446_DSP_Oscilloscope Demo_DSP_ADDA_Dual TrG_Oscilloscope

Revision:
1:e1c5baa559de
Parent:
0:c02c700a8ecf
Child:
2:91765f32ab2c
--- a/DSP_AdcDualBase.cpp	Tue Sep 22 04:52:53 2020 +0000
+++ b/DSP_AdcDualBase.cpp	Wed Sep 23 01:49:40 2020 +0000
@@ -6,7 +6,7 @@
 //  Read(), Write() の引数:
 //      第一引数:CH1,第二引数:CH2
 //
-//  2020/09/22, Copyright (c) 2020 MIKAMI, Naoki
+//  2020/09/23, Copyright (c) 2020 MIKAMI, Naoki
 //----------------------------------------------------------
 
 #include "DSP_AdcDualBase.hpp"
@@ -15,8 +15,8 @@
 namespace Mikami
 {
     DspAdcDualBase::DspAdcDualBase(float fSampling,
-    								 PinName pinCh1, PinName pinCh2)
-    	: adcCh1_(ADC2), adcCh2_(ADC3)
+                                   PinName pinCh1, PinName pinCh2)
+        : adcCh1_(ADC2), adcCh2_(ADC3)
     {
         // pin に対応する ADC が存在するか確認
         MBED_ASSERT(PinmapMatch(pinCh1, adcCh1_));
@@ -38,34 +38,12 @@
         ADC->CCR = 0x0;     // ADC 共通の設定, 念のため
 
         // AD 変換器の外部トリガに使うタイマ (TIM8) の設定
-        SetTim8(fSampling);
-    }
-
-    // AD 変換器の初期設定
-    void DspAdcDualBase::Initialize(ADC_TypeDef* adc, PinName pin)
-    {
-        // 一つの ADC につき,1 チャンネルのみ使用の設定
-        adc->SQR1 &= ~ADC_SQR1_L;
-
-        // pin に対応するチャンネルを使うための設定
-        adc->SQR3 = STM_PIN_CHANNEL(pinmap_function(pin, PinMap_ADC));
-        // pinmap_function() のヘッダファイル: mbed\hal\pinmap.h
-        // pinmap_function() が定義されているファイル: mbed-dev\hal\mbed_pinmap_common.c
-        // STM_PIN_CHANNEL() の定義:mbed\TARGET_NUCLEO_F446RE\TOOLCHAIN_ARM_STD\
-        //                           PinNamesTypes.h
-
-        // ADC の CR1 の設定
-        adc->CR1 = 0x0;  // 12bit, 非Scan モード,AD 変換終了割込みを禁止
-
-        // ADC の CR2 の設定
-        adc->CR2 = ADC_EXTERNALTRIGCONVEDGE_RISING	// 外部トリガの立ち上がりで開始される
-                 | ADC_EXTERNALTRIGCONV_T8_TRGO     // 外部トリガ: Timer8 TRGO event
-                 | ADC_CR2_ADON;                    // ADC を有効にする
+        SetFs(fSampling);
     }
 
     // AD 変換器の外部トリガに使うタイマ (TIM8) の設定
     //      fSampling   標本化周波数 [kHz]
-    void DspAdcDualBase::SetTim8(float fSampling)
+    void DspAdcDualBase::SetFs(float fSampling)
     {
         __HAL_RCC_TIM8_CLK_ENABLE();    // クロック供給. "stm32f4xx_hal_rcc.h" 参照
         TIM_TypeDef* const TIM = TIM8;
@@ -94,6 +72,28 @@
         TIM->CR1 = TIM_CR1_CEN; // TIM8 を有効にする
     }
 
+    // AD 変換器の初期設定
+    void DspAdcDualBase::Initialize(ADC_TypeDef* adc, PinName pin)
+    {
+        // 一つの ADC につき,1 チャンネルのみ使用の設定
+        adc->SQR1 &= ~ADC_SQR1_L;
+
+        // pin に対応するチャンネルを使うための設定
+        adc->SQR3 = STM_PIN_CHANNEL(pinmap_function(pin, PinMap_ADC));
+        // pinmap_function() のヘッダファイル: mbed\hal\pinmap.h
+        // pinmap_function() が定義されているファイル: mbed-dev\hal\mbed_pinmap_common.c
+        // STM_PIN_CHANNEL() の定義:mbed\TARGET_NUCLEO_F446RE\TOOLCHAIN_ARM_STD\
+        //                           PinNamesTypes.h
+
+        // ADC の CR1 の設定
+        adc->CR1 = 0x0;  // 12bit, 非Scan モード,AD 変換終了割込みを禁止
+
+        // ADC の CR2 の設定
+        adc->CR2 = ADC_EXTERNALTRIGCONVEDGE_RISING	// 外部トリガの立ち上がりで開始される
+                 | ADC_EXTERNALTRIGCONV_T8_TRGO     // 外部トリガ: Timer8 TRGO event
+                 | ADC_CR2_ADON;                    // ADC を有効にする
+    }
+
     //  pin に対応する AD 変換器が存在することを確認する
     //      pin     A0, PA_0 など
     //      adc     ADC1 など