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
Diff: F446_DAC_Single.cpp
- Revision:
- 0:2a5690e56a16
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/F446_DAC_Single.cpp Tue Feb 21 00:40:10 2017 +0000 @@ -0,0 +1,56 @@ +//-------------------------------------------------------- +// Class for buit-in single DAC on STM32F446 +// +// STM32F446 内蔵の DAC 用のクラス +// DAC_OUT1: A2 (PA_4) +// DAC_OUT2: D13 (PA_5) +// +// 2017/02/21, Copyright (c) 2017 MIKAMI, Naoki +//-------------------------------------------------------- + +#include "F446_DAC_Single.hpp" + +namespace Mikami +{ + DacSingle::DacSingle(PinName pin) : da_(pin) + { + if (pin == A2) + { + DAC->CR = DAC_CR_EN1 | DAC_CR_TEN1 | DAC_CR_TSEL1; + fpWriteDac = &DacSingle::WriteDac1; + } + else + { + DAC->CR = DAC_CR_EN2 | DAC_CR_TEN2 | DAC_CR_TSEL2; + fpWriteDac = &DacSingle::WriteDac2; + } + } + + // Write single-channel data + void DacSingle::WriteDac1(uint16_t val) + { + DAC->DHR12R1 = val; + DAC->SWTRIGR = DAC_SWTRIGR_SWTRIG1; + } + void DacSingle::WriteDac2(uint16_t val) + { + DAC->DHR12R2 = val; + DAC->SWTRIGR = DAC_SWTRIGR_SWTRIG2; + } + + void DacSingle::ScfClock(uint32_t clock) + { + PwmOut clockSCF(D12); // PA6 + + uint32_t arr; + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RCC_DCKCFGR_TIMPRE) + arr = SystemCoreClock/clock - 1; + else + arr = SystemCoreClock/(2*clock) - 1; + TIM3->ARR = arr; + TIM3->PSC = 0; + + // Set capture/compare register 1 + TIM3->CCR1 = (TIM3->ARR + 1)/2; + } +}