/
dac.c
45 lines (40 loc) · 967 Bytes
/
dac.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
@file dac.c
@brief DAC routines
@author Matej Kogovsek
@copyright LGPL 2.1
@note This file is part of mat-stm32f1-lib
*/
#include <stm32f10x.h>
#include <stm32f10x_dac.h>
/**
@brief Set DAC value
@param[in] n DAC channel
@param[in] v Value
*/
void dac_set(uint8_t n, uint16_t v)
{
if( n == 1 ) {
DAC_SetChannel1Data(DAC_Align_12b_R, v);
} else {
DAC_SetChannel2Data(DAC_Align_12b_R, v);
}
}
/**
@brief Init DAC.
@param[in] n DAC channel
*/
void dac_init(uint8_t n)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
DAC_InitTypeDef daci;
DAC_StructInit(&daci);
DAC_Init(n == 1 ? DAC_Channel_1 : DAC_Channel_2, &daci);
DAC_Cmd(n == 1 ? DAC_Channel_1 : DAC_Channel_2, ENABLE);
GPIO_InitTypeDef iotd;
GPIO_StructInit(&iotd);
iotd.GPIO_Pin = n == 1 ? GPIO_Pin_4 : GPIO_Pin_5;
iotd.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &iotd);
}