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.hpp
- Revision:
- 0:c02c700a8ecf
- Child:
- 1:e1c5baa559de
diff -r 000000000000 -r c02c700a8ecf DSP_AdcDualBase.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DSP_AdcDualBase.hpp Tue Sep 22 04:52:53 2020 +0000 @@ -0,0 +1,66 @@ +//---------------------------------------------------------- +// STM32F446 の ADC2, ADC3 を使って同時に AD 変換を開始し, +// アナログ信号を入力するための抽象クラス(ヘッダ) +// CH1 は ADC2 を使用 +// CH2 は ADC3 を使用 +// Read(), Write() の引数: +// 第一引数:CH1,第二引数:CH2 +// +// 2020/09/22, Copyright (c) 2020 MIKAMI, Naoki +//---------------------------------------------------------- + +#include "mbed.h" +#include "PeripheralPins.h" // PinMap_ADC で使用 +// PeripheralPins.c が含まれるディレクトリ: +// mbed-dev\targets\TARGET_STM\TARGET_STM32F4\ +// TARGET_STM32F446xE\TARGET_NUCLEO_F446RE + +#ifndef STM32F446xx +#error Select NUCLEO-F446RE. +#endif + +#ifndef F446_ADC_DUAL_HPP +#define F446_ADC_DUAL_HPP + +namespace Mikami +{ + class DspAdcDualBase + { + public: + // コンストラクタ + // fSampling 標本化周波数 [kHz] + // pinCh1 チャンネル 1 に対応する入力ピンの名前 + // pinCh2 チャンネル 2 に対応する入力ピンの名前 + DspAdcDualBase(float fSampling, PinName pinCh1, PinName pinCh2); + + virtual ~DspAdcDualBase() {} + + // AD 変換された値を読み込む + // -1.0f <= AD変換された値 < 1.0f + virtual void Read(float &ad1, float &ad2) const = 0; // 純粋仮想関数 + + protected: + ADC_TypeDef* adcCh1_; // チャンネル 1 の AD 変換器に対応する構造体のポインタ + ADC_TypeDef* adcCh2_; // チャンネル 2 の AD 変換器に対応する構造体のポインタ + + float ToFloat(uint16_t x) const { return AMP_*(x - 2048); } + + private: + static const float AMP_ = 1.0f/2048.0f; + + // AD 変換器の初期設定 + void Initialize(ADC_TypeDef* adc, PinName pin); + + // AD 変換器の外部トリガに使うタイマ (TIM8) の設定 + // fSampling 標本化周波数 [kHz] + void SetTim8(float fSampling); + + // pin に対応する AD 変換器が存在することを確認する + bool PinmapMatch(PinName pin, ADC_TypeDef* const adc); + + // コピー・コンストラクタ,代入演算子の禁止のため + DspAdcDualBase(const DspAdcDualBase&); + DspAdcDualBase& operator=(const DspAdcDualBase&); + }; +} +#endif // F446_ADC_DUAL_HPP \ No newline at end of file