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
MikamiUitOpen 0:2a5690e56a16 3 //
MikamiUitOpen 0:2a5690e56a16 4 // STM32F446 内蔵の DAC 用のクラス
MikamiUitOpen 0:2a5690e56a16 5 // DAC_OUT1: A2 (PA_4)
MikamiUitOpen 0:2a5690e56a16 6 // DAC_OUT2: D13 (PA_5)
MikamiUitOpen 0:2a5690e56a16 7 //
MikamiUitOpen 0:2a5690e56a16 8 // 2017/02/21, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:2a5690e56a16 9 //--------------------------------------------------------
MikamiUitOpen 0:2a5690e56a16 10
MikamiUitOpen 0:2a5690e56a16 11 #include "F446_DAC_Single.hpp"
MikamiUitOpen 0:2a5690e56a16 12
MikamiUitOpen 0:2a5690e56a16 13 namespace Mikami
MikamiUitOpen 0:2a5690e56a16 14 {
MikamiUitOpen 0:2a5690e56a16 15 DacSingle::DacSingle(PinName pin) : da_(pin)
MikamiUitOpen 0:2a5690e56a16 16 {
MikamiUitOpen 0:2a5690e56a16 17 if (pin == A2)
MikamiUitOpen 0:2a5690e56a16 18 {
MikamiUitOpen 0:2a5690e56a16 19 DAC->CR = DAC_CR_EN1 | DAC_CR_TEN1 | DAC_CR_TSEL1;
MikamiUitOpen 0:2a5690e56a16 20 fpWriteDac = &DacSingle::WriteDac1;
MikamiUitOpen 0:2a5690e56a16 21 }
MikamiUitOpen 0:2a5690e56a16 22 else
MikamiUitOpen 0:2a5690e56a16 23 {
MikamiUitOpen 0:2a5690e56a16 24 DAC->CR = DAC_CR_EN2 | DAC_CR_TEN2 | DAC_CR_TSEL2;
MikamiUitOpen 0:2a5690e56a16 25 fpWriteDac = &DacSingle::WriteDac2;
MikamiUitOpen 0:2a5690e56a16 26 }
MikamiUitOpen 0:2a5690e56a16 27 }
MikamiUitOpen 0:2a5690e56a16 28
MikamiUitOpen 0:2a5690e56a16 29 // Write single-channel data
MikamiUitOpen 0:2a5690e56a16 30 void DacSingle::WriteDac1(uint16_t val)
MikamiUitOpen 0:2a5690e56a16 31 {
MikamiUitOpen 0:2a5690e56a16 32 DAC->DHR12R1 = val;
MikamiUitOpen 0:2a5690e56a16 33 DAC->SWTRIGR = DAC_SWTRIGR_SWTRIG1;
MikamiUitOpen 0:2a5690e56a16 34 }
MikamiUitOpen 0:2a5690e56a16 35 void DacSingle::WriteDac2(uint16_t val)
MikamiUitOpen 0:2a5690e56a16 36 {
MikamiUitOpen 0:2a5690e56a16 37 DAC->DHR12R2 = val;
MikamiUitOpen 0:2a5690e56a16 38 DAC->SWTRIGR = DAC_SWTRIGR_SWTRIG2;
MikamiUitOpen 0:2a5690e56a16 39 }
MikamiUitOpen 0:2a5690e56a16 40
MikamiUitOpen 0:2a5690e56a16 41 void DacSingle::ScfClock(uint32_t clock)
MikamiUitOpen 0:2a5690e56a16 42 {
MikamiUitOpen 0:2a5690e56a16 43 PwmOut clockSCF(D12); // PA6
MikamiUitOpen 0:2a5690e56a16 44
MikamiUitOpen 0:2a5690e56a16 45 uint32_t arr;
MikamiUitOpen 0:2a5690e56a16 46 if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RCC_DCKCFGR_TIMPRE)
MikamiUitOpen 0:2a5690e56a16 47 arr = SystemCoreClock/clock - 1;
MikamiUitOpen 0:2a5690e56a16 48 else
MikamiUitOpen 0:2a5690e56a16 49 arr = SystemCoreClock/(2*clock) - 1;
MikamiUitOpen 0:2a5690e56a16 50 TIM3->ARR = arr;
MikamiUitOpen 0:2a5690e56a16 51 TIM3->PSC = 0;
MikamiUitOpen 0:2a5690e56a16 52
MikamiUitOpen 0:2a5690e56a16 53 // Set capture/compare register 1
MikamiUitOpen 0:2a5690e56a16 54 TIM3->CCR1 = (TIM3->ARR + 1)/2;
MikamiUitOpen 0:2a5690e56a16 55 }
MikamiUitOpen 0:2a5690e56a16 56 }