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
Diff: F446_DAC.hpp
- Revision:
- 5:7851fd2f875b
- Parent:
- 3:d1da91aec62f
--- a/F446_DAC.hpp Sat Feb 18 05:37:31 2017 +0000 +++ b/F446_DAC.hpp Tue Feb 21 12:56:51 2017 +0000 @@ -4,10 +4,10 @@ // // STM32F446 内蔵の DAC 用のクラス(ヘッダ) // TIM3 を外付けの SCF のクロックとして使用 -// DAC_OUT1: A2 (PA_4), 左 -// DAC_OUT2: D13 (PA_5), 右 +// A2 (PA_4): 左 +// D13 (PA_5): 右 // -// 2017/01/30, Copyright (c) 2017 MIKAMI, Naoki +// 2017/02/19, Copyright (c) 2017 MIKAMI, Naoki //-------------------------------------------------------- #include "mbed.h" @@ -41,34 +41,30 @@ // 0 <= data1, data2 <= 4095 // data1: left, data2: right void Write(uint16_t data1, uint16_t data2) - { WriteDac(SatUint16(data1), SatUint16(data2)); } + { WriteDac(__USAT(data1, BIT_WIDTH_), + __USAT(data2, BIT_WIDTH_)); } // Set TIM3 for clock of switched-capacitor filter void ScfClock(uint32_t clock); private: - static const uint32_t swtrig_ = DAC_SWTRIGR_SWTRIG1 + static const uint32_t SWTRIG_ = DAC_SWTRIGR_SWTRIG1 | DAC_SWTRIGR_SWTRIG2; + static const int BIT_WIDTH_ = 12; AnalogOut da1_, da2_; // Write dual-channel data void WriteDac(uint16_t val1, uint16_t val2) { - DAC->DHR12RD = (val2 << 16) | val1; - DAC->SWTRIGR = swtrig_; + DAC->DHR12RD = __PKHBT(val1, val2, 16); + DAC->SWTRIGR = SWTRIG_; } - // Saturate float to an unsigned 16-bit value + // Saturate float to an unsigned 16-bit type 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); + return __USAT((val + 1.0f)*2047.0f, BIT_WIDTH_); } - - // 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&);