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
F446_DAC_Single.cpp@0:2a5690e56a16, 2017-02-21 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Tue Feb 21 00:40:10 2017 +0000
- Revision:
- 0:2a5690e56a16
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |