Library for build-in ADC and DAC in STM32F446 mounted on Nucleo F446RE. Nucleo F446RE に搭載されている STM32F446 の内蔵 ADC, DAC 用のライブラリ.
Dependents: Demo_F446_AD_DA F446_MySoundMachine F446_ADF_Nlms F446_Spectrogram
F446_DAC.hpp
- Committer:
- MikamiUitOpen
- Date:
- 2016-11-12
- Revision:
- 1:6b9f2af6613d
- Parent:
- 0:c945b4fe9a48
- Child:
- 3:d1da91aec62f
File content as of revision 1:6b9f2af6613d:
//-------------------------------------------------------- // Class for buit-in dual DAC on STM32F446 ---- Header // TIM3 is used for clock to external SCF // // STM32F446 内蔵の DAC 用のクラス(ヘッダ) // TIM3 を外付けの SCF のクロックとして使用 // DAC_OUT1: A2 (PA_4), 左 // DAC_OUT2: D13 (PA_5), 右 // // 2016/11/12, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------- #include "mbed.h" #ifndef STM32F446xx #error Select STM32F446. #endif #ifndef F446_DAC_DUAL_HPP #define F446_DAC_DUAL_HPP namespace Mikami { class DacDual { public: // Constructor DacDual() : da1_(PA_4), da2_(PA_5) { DAC->CR = DAC_CR_EN1 | DAC_CR_TEN1 | DAC_CR_TSEL1 | DAC_CR_EN2 | DAC_CR_TEN2 | DAC_CR_TSEL2; } virtual ~DacDual() {} // -1.0f <= data1, data2 <= 1.0f // data1: left, data2: right void Write(float data1, float data2) { WriteDac(ToUint16(data1), ToUint16(data2)); } // 0 <= data1, data2 <= 4095 // data1: left, data2: right void Write(uint16_t data1, uint16_t data2) { WriteDac(SatUint16(data1), SatUint16(data2)); } // Set TIM3 for clock of switched-capacitor filter void ScfClock(uint32_t clock); private: static const uint32_t swtrig_ = DAC_SWTRIGR_SWTRIG1 | DAC_SWTRIGR_SWTRIG2; AnalogOut da1_, da2_; // Write dual-channel data void WriteDac(uint16_t val1, uint16_t val2) { DAC->DHR12RD = (val2 << 16) | val1; DAC->SWTRIGR = swtrig_; } // Saturate float to an unsigned 16-bit value uint16_t ToUint16(float val) { if (val < -1.0f) val = -1.0f; if (val > 1.0f) val = 1.0f; return (uint16_t)((val + 1.0f)*2047); } // Saturate to an unsigned 16-bit value uint16_t SatUint16(uint16_t val) { return (val > 4095) ? 4095 : val; } // for inhibition of copy constructor DacDual(const DacDual&); // for inhibition of substitute operator DacDual& operator=(const DacDual&); }; } #endif // F446_DAC_DUAL_HPP