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
Diff: DSP_AdcDualBase.cpp
- 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 など