Nucleo-F446RE 内蔵の AD/DA を使うためのライブラリ.DA からの出力は,標本化周波数の4倍のレートで行う.AD の読み込みにはソフトウェア割り込みを使用.  このライブラリを登録した際のプログラム: Demo_F446_AD_DA_MultirateSWI. Library for built-in ADC and DAC in Nucleo-F446RE using software interrupt for reading ADC. Sampling rate for DAC is four times of that for ADC.

Dependencies:   Array_Matrix

Dependents:   F446_UpSampling_LPF_HPF_Variable Demo_F446_AD_DA_MultirateSWI

Committer:
MikamiUitOpen
Date:
Sun Feb 09 02:18:32 2020 +0000
Revision:
2:c8aa7ae0012c
Parent:
0:3e5b7187753d
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:3e5b7187753d 1 //----------------------------------------------------------------
MikamiUitOpen 0:3e5b7187753d 2 // AD Conversion by interrupt using ADC2 or ADC3 on STM32F446
MikamiUitOpen 0:3e5b7187753d 3 // ---- Header ----
MikamiUitOpen 0:3e5b7187753d 4 //
MikamiUitOpen 0:3e5b7187753d 5 // STM32F446 の ADC2 または ADC3 を使って割込みによりアナログ信号を
MikamiUitOpen 0:3e5b7187753d 6 // 入力するクラス ― マルチ・レート処理用(ヘッダ)
MikamiUitOpen 0:3e5b7187753d 7 //
MikamiUitOpen 0:3e5b7187753d 8 // 選択可能な入力端子:
MikamiUitOpen 0:3e5b7187753d 9 // A0 (PA_0) : ADC2 CH0 ---- デフォルト
MikamiUitOpen 0:3e5b7187753d 10 // A1 (PA_1) : ADC3 CH1
MikamiUitOpen 0:3e5b7187753d 11 //
MikamiUitOpen 0:3e5b7187753d 12 // 2018/04/16, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:3e5b7187753d 13 //----------------------------------------------------------------
MikamiUitOpen 0:3e5b7187753d 14
MikamiUitOpen 0:3e5b7187753d 15 #include "mbed.h"
MikamiUitOpen 0:3e5b7187753d 16
MikamiUitOpen 0:3e5b7187753d 17 #ifndef STM32F446xx
MikamiUitOpen 0:3e5b7187753d 18 #error Not NUCLEO-F446RE.
MikamiUitOpen 0:3e5b7187753d 19 #endif
MikamiUitOpen 0:3e5b7187753d 20
MikamiUitOpen 0:3e5b7187753d 21 #include "F446_DAC.hpp"
MikamiUitOpen 0:3e5b7187753d 22
MikamiUitOpen 0:3e5b7187753d 23 #ifndef F446_ADC_SINGLE_HPP
MikamiUitOpen 0:3e5b7187753d 24 #define F446_ADC_SINGLE_HPP
MikamiUitOpen 0:3e5b7187753d 25
MikamiUitOpen 0:3e5b7187753d 26 namespace Mikami
MikamiUitOpen 0:3e5b7187753d 27 {
MikamiUitOpen 0:3e5b7187753d 28 class AdcF446
MikamiUitOpen 0:3e5b7187753d 29 {
MikamiUitOpen 0:3e5b7187753d 30 public:
MikamiUitOpen 0:3e5b7187753d 31 // コンストラクタ
MikamiUitOpen 0:3e5b7187753d 32 // frequency: 標本化周波数
MikamiUitOpen 0:3e5b7187753d 33 AdcF446(int frequency, PinName pin = A0);
MikamiUitOpen 0:3e5b7187753d 34
MikamiUitOpen 0:3e5b7187753d 35 virtual ~AdcF446() {}
MikamiUitOpen 0:3e5b7187753d 36
MikamiUitOpen 0:3e5b7187753d 37 // -1.0f <= AD変換された値 < 1.0f
MikamiUitOpen 0:3e5b7187753d 38 // ad1: left, ad2: right
MikamiUitOpen 0:3e5b7187753d 39 float Read() { return ToFloat(adc_->DR); }
MikamiUitOpen 0:3e5b7187753d 40
MikamiUitOpen 0:3e5b7187753d 41 // 割込みベクタを設定し,ADC 割込みを有効にする
MikamiUitOpen 0:3e5b7187753d 42 void SetIntrVec(void (*Func)());
MikamiUitOpen 0:3e5b7187753d 43
MikamiUitOpen 0:3e5b7187753d 44 // ADC 割込みを無効にする
MikamiUitOpen 0:3e5b7187753d 45 void DisableAdcIntr()
MikamiUitOpen 0:3e5b7187753d 46 { NVIC_DisableIRQ(ADC_IRQn); }
MikamiUitOpen 0:3e5b7187753d 47
MikamiUitOpen 0:3e5b7187753d 48 private:
MikamiUitOpen 0:3e5b7187753d 49 static const float AMP_ = 1.0f/2048.0f;
MikamiUitOpen 0:3e5b7187753d 50 ADC_TypeDef *adc_;
MikamiUitOpen 0:3e5b7187753d 51
MikamiUitOpen 0:3e5b7187753d 52 float ToFloat(uint16_t x) { return AMP_*(x - 2048); }
MikamiUitOpen 0:3e5b7187753d 53
MikamiUitOpen 0:3e5b7187753d 54 // AD 変換器の外部トリガに使うタイマ (TIM8) の設定
MikamiUitOpen 0:3e5b7187753d 55 void SetTim8(int frequency);
MikamiUitOpen 0:3e5b7187753d 56
MikamiUitOpen 0:3e5b7187753d 57 // for inhibition of copy constructor
MikamiUitOpen 0:3e5b7187753d 58 AdcF446(const AdcF446&);
MikamiUitOpen 0:3e5b7187753d 59 // for inhibition of substitute operator
MikamiUitOpen 0:3e5b7187753d 60 AdcF446& operator=(const AdcF446&);
MikamiUitOpen 0:3e5b7187753d 61 };
MikamiUitOpen 0:3e5b7187753d 62 }
MikamiUitOpen 0:3e5b7187753d 63 #endif // F446_ADC_SINGLE_HPP