Library for build-in ADC and DAC in STM32F446 mounted on Nucleo F446RE. For single channel. Nucleo F446RE に搭載されている STM32F446 の内蔵 ADC, DAC 用のライブラリ.1チャンネルで使う場合.

Dependents:   Demo_F446_AD_DA_Single F446ZE-mbed-devfiles

Committer:
MikamiUitOpen
Date:
Tue Feb 21 00:40:10 2017 +0000
Revision:
0:2a5690e56a16
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:2a5690e56a16 1 //--------------------------------------------------------
MikamiUitOpen 0:2a5690e56a16 2 // Class for buit-in single DAC on STM32F446 ---- Header
MikamiUitOpen 0:2a5690e56a16 3 // TIM3 is used for clock to external SCF
MikamiUitOpen 0:2a5690e56a16 4 //
MikamiUitOpen 0:2a5690e56a16 5 // STM32F446 内蔵の DAC 用のクラス(ヘッダ)
MikamiUitOpen 0:2a5690e56a16 6 // TIM3 を外付けの SCF のクロックとして使用
MikamiUitOpen 0:2a5690e56a16 7 // A2 (PA_4): 左 ---- デフォルト
MikamiUitOpen 0:2a5690e56a16 8 // D13 (PA_5): 右
MikamiUitOpen 0:2a5690e56a16 9 //
MikamiUitOpen 0:2a5690e56a16 10 // 2017/02/21, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:2a5690e56a16 11 //--------------------------------------------------------
MikamiUitOpen 0:2a5690e56a16 12
MikamiUitOpen 0:2a5690e56a16 13 #include "mbed.h"
MikamiUitOpen 0:2a5690e56a16 14
MikamiUitOpen 0:2a5690e56a16 15 #ifndef STM32F446xx
MikamiUitOpen 0:2a5690e56a16 16 #error Select NUCLEO-F446RE.
MikamiUitOpen 0:2a5690e56a16 17 #endif
MikamiUitOpen 0:2a5690e56a16 18
MikamiUitOpen 0:2a5690e56a16 19 #ifndef F446_DAC_SINGLE_HPP
MikamiUitOpen 0:2a5690e56a16 20 #define F446_DAC_SINGLE_HPP
MikamiUitOpen 0:2a5690e56a16 21
MikamiUitOpen 0:2a5690e56a16 22 namespace Mikami
MikamiUitOpen 0:2a5690e56a16 23 {
MikamiUitOpen 0:2a5690e56a16 24 class DacSingle
MikamiUitOpen 0:2a5690e56a16 25 {
MikamiUitOpen 0:2a5690e56a16 26 public:
MikamiUitOpen 0:2a5690e56a16 27 // Constructor
MikamiUitOpen 0:2a5690e56a16 28 DacSingle(PinName pin = A2);
MikamiUitOpen 0:2a5690e56a16 29
MikamiUitOpen 0:2a5690e56a16 30 virtual ~DacSingle() {}
MikamiUitOpen 0:2a5690e56a16 31
MikamiUitOpen 0:2a5690e56a16 32 // -1.0f <= data <= 1.0f
MikamiUitOpen 0:2a5690e56a16 33 void Write(float data) { WriteDac(ToUint16(data)); }
MikamiUitOpen 0:2a5690e56a16 34
MikamiUitOpen 0:2a5690e56a16 35 // 0 <= data1<= 4095
MikamiUitOpen 0:2a5690e56a16 36 void Write(uint16_t data) { WriteDac(__USAT(data, BIT_WIDTH_)); }
MikamiUitOpen 0:2a5690e56a16 37
MikamiUitOpen 0:2a5690e56a16 38 // Set TIM3 for clock of switched-capacitor filter
MikamiUitOpen 0:2a5690e56a16 39 void ScfClock(uint32_t clock);
MikamiUitOpen 0:2a5690e56a16 40
MikamiUitOpen 0:2a5690e56a16 41 private:
MikamiUitOpen 0:2a5690e56a16 42 void (DacSingle::*fpWriteDac)(uint16_t);
MikamiUitOpen 0:2a5690e56a16 43
MikamiUitOpen 0:2a5690e56a16 44 static const int BIT_WIDTH_ = 12;
MikamiUitOpen 0:2a5690e56a16 45 AnalogOut da_;
MikamiUitOpen 0:2a5690e56a16 46
MikamiUitOpen 0:2a5690e56a16 47 // Write single-channel data
MikamiUitOpen 0:2a5690e56a16 48 void WriteDac1(uint16_t val);
MikamiUitOpen 0:2a5690e56a16 49 void WriteDac2(uint16_t val);
MikamiUitOpen 0:2a5690e56a16 50
MikamiUitOpen 0:2a5690e56a16 51 void WriteDac(uint16_t val) { (this->*fpWriteDac)(val); }
MikamiUitOpen 0:2a5690e56a16 52
MikamiUitOpen 0:2a5690e56a16 53 // Saturate float to an unsigned 16-bit value
MikamiUitOpen 0:2a5690e56a16 54 uint16_t ToUint16(float val)
MikamiUitOpen 0:2a5690e56a16 55 { return __USAT((val + 1.0f)*2047.0f, BIT_WIDTH_); }
MikamiUitOpen 0:2a5690e56a16 56
MikamiUitOpen 0:2a5690e56a16 57 // for inhibition of copy constructor
MikamiUitOpen 0:2a5690e56a16 58 DacSingle(const DacSingle&);
MikamiUitOpen 0:2a5690e56a16 59 // for inhibition of substitute operator
MikamiUitOpen 0:2a5690e56a16 60 DacSingle& operator=(const DacSingle&);
MikamiUitOpen 0:2a5690e56a16 61 };
MikamiUitOpen 0:2a5690e56a16 62 }
MikamiUitOpen 0:2a5690e56a16 63 #endif // F446_DAC_SINGLEL_HPP