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

Committer:
MikamiUitOpen
Date:
Tue Jun 29 00:58:39 2021 +0000
Revision:
3:a3148d75c1ea
Parent:
0:c02c700a8ecf
4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:c02c700a8ecf 1 //--------------------------------------------------------
MikamiUitOpen 0:c02c700a8ecf 2 // STM32F446 内蔵の DAC 用のクラス(ヘッダ)
MikamiUitOpen 0:c02c700a8ecf 3 // A2 (PA_4): 左
MikamiUitOpen 0:c02c700a8ecf 4 // D13 (PA_5): 右
MikamiUitOpen 0:c02c700a8ecf 5 //
MikamiUitOpen 0:c02c700a8ecf 6 // 2020/09/22, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:c02c700a8ecf 7 //--------------------------------------------------------
MikamiUitOpen 0:c02c700a8ecf 8
MikamiUitOpen 0:c02c700a8ecf 9 #include "mbed.h"
MikamiUitOpen 0:c02c700a8ecf 10 #include "PeripheralPins.h" // pin_function() で使用
MikamiUitOpen 0:c02c700a8ecf 11 // PeripheralPins.c が含まれるディレクトリ:
MikamiUitOpen 0:c02c700a8ecf 12 // mbed-dev\targets\TARGET_STM\TARGET_STM32F4\
MikamiUitOpen 0:c02c700a8ecf 13 // TARGET_STM32F446xE\TARGET_NUCLEO_F446RE
MikamiUitOpen 0:c02c700a8ecf 14
MikamiUitOpen 0:c02c700a8ecf 15 #ifndef STM32F446xx
MikamiUitOpen 0:c02c700a8ecf 16 #error Select NUCLEO-F446RE.
MikamiUitOpen 0:c02c700a8ecf 17 #endif
MikamiUitOpen 0:c02c700a8ecf 18
MikamiUitOpen 0:c02c700a8ecf 19 #ifndef F446_DAC_DUAL_HPP
MikamiUitOpen 0:c02c700a8ecf 20 #define F446_DAC_DUAL_HPP
MikamiUitOpen 0:c02c700a8ecf 21
MikamiUitOpen 0:c02c700a8ecf 22 namespace Mikami
MikamiUitOpen 0:c02c700a8ecf 23 {
MikamiUitOpen 0:c02c700a8ecf 24 class DspDacDual
MikamiUitOpen 0:c02c700a8ecf 25 {
MikamiUitOpen 0:c02c700a8ecf 26 public:
MikamiUitOpen 0:c02c700a8ecf 27 // コンストラクタ
MikamiUitOpen 0:c02c700a8ecf 28 DspDacDual();
MikamiUitOpen 0:c02c700a8ecf 29
MikamiUitOpen 0:c02c700a8ecf 30 virtual ~DspDacDual() {}
MikamiUitOpen 0:c02c700a8ecf 31
MikamiUitOpen 0:c02c700a8ecf 32 // -1.0f <= data1, data2 <= 1.0f
MikamiUitOpen 0:c02c700a8ecf 33 void Write(float data1, float data2)
MikamiUitOpen 0:c02c700a8ecf 34 { WriteDac(ToUint16(data1), ToUint16(data2)); }
MikamiUitOpen 0:c02c700a8ecf 35
MikamiUitOpen 0:c02c700a8ecf 36 // 0 <= data1, data2 <= 4095
MikamiUitOpen 0:c02c700a8ecf 37 void Write(uint16_t data1, uint16_t data2)
MikamiUitOpen 0:c02c700a8ecf 38 { WriteDac(__USAT(data1, BIT_WIDTH_),
MikamiUitOpen 0:c02c700a8ecf 39 __USAT(data2, BIT_WIDTH_)); }
MikamiUitOpen 0:c02c700a8ecf 40
MikamiUitOpen 0:c02c700a8ecf 41 private:
MikamiUitOpen 0:c02c700a8ecf 42 static const int BIT_WIDTH_ = 12;
MikamiUitOpen 0:c02c700a8ecf 43 DAC_TypeDef* const DAC_; // DA 変換器に対応する構造体のポインタ
MikamiUitOpen 0:c02c700a8ecf 44
MikamiUitOpen 0:c02c700a8ecf 45 // float 型のデータを uint16_t 型に変換,飽和処理付き
MikamiUitOpen 0:c02c700a8ecf 46 uint16_t ToUint16(float val)
MikamiUitOpen 0:c02c700a8ecf 47 { return __USAT((val + 1.0f)*2047.0f, BIT_WIDTH_); }
MikamiUitOpen 0:c02c700a8ecf 48
MikamiUitOpen 0:c02c700a8ecf 49 // 2チャンネル分を同時に DAC に書き込む
MikamiUitOpen 0:c02c700a8ecf 50 void WriteDac(uint16_t val1, uint16_t val2)
MikamiUitOpen 0:c02c700a8ecf 51 { DAC->DHR12RD = __PKHBT(val1, val2, 16); }
MikamiUitOpen 0:c02c700a8ecf 52
MikamiUitOpen 0:c02c700a8ecf 53 // コピー・コンストラクタ,代入演算子の禁止のため
MikamiUitOpen 0:c02c700a8ecf 54 DspDacDual(const DspDacDual&);
MikamiUitOpen 0:c02c700a8ecf 55 DspDacDual& operator=(const DspDacDual&);
MikamiUitOpen 0:c02c700a8ecf 56 };
MikamiUitOpen 0:c02c700a8ecf 57 }
MikamiUitOpen 0:c02c700a8ecf 58 #endif // F446_DAC_DUAL_HPP