@@ -0,0 +1,33 | |||||
|
1 | #ifndef DAC_LIB_H | |||
|
2 | #define DAC_LIB_H | |||
|
3 | ||||
|
4 | #define DAC1_12bit_right_align 0x40007408 | |||
|
5 | #define DAC1_12bit_left_align 0x4000740C | |||
|
6 | #define DAC1_8bit_right_align 0x40007410 | |||
|
7 | #define DAC2_12bit_right_align 0x40007414 | |||
|
8 | #define DAC2_12bit_left_align 0x40007418 | |||
|
9 | #define DAC2_8bit_right_align 0x4000741C | |||
|
10 | #define DAC_Dual_12bit_right_align 0x40007420 | |||
|
11 | #define DAC_Dual_12bit_left_align 0x40007424 | |||
|
12 | #define DAC_Dual_8bit_right_align 0x40007428 | |||
|
13 | #define DAC_Dual_8bit_left_align 0x4000742C | |||
|
14 | ||||
|
15 | #define DAC1 0 | |||
|
16 | #define DAC2 1 | |||
|
17 | ||||
|
18 | #define timer2 1 | |||
|
19 | #define timer3 2 | |||
|
20 | #define timer4 3 | |||
|
21 | #define timer5 4 | |||
|
22 | #define timer6 5 | |||
|
23 | #define timer7 6 | |||
|
24 | #define timer8 7 | |||
|
25 | ||||
|
26 | ||||
|
27 | extern int dacopen(uint32_t pin); | |||
|
28 | extern int dacsetconfig(int timer, int buffer_size, int dac,uint32_t dac_type, uint32_t freq,uint32_t data); | |||
|
29 | ||||
|
30 | ||||
|
31 | ||||
|
32 | ||||
|
33 | #endif // DAC_LIB_H |
@@ -0,0 +1,127 | |||||
|
1 | #include <stdio.h> | |||
|
2 | //#include <bsp.h> | |||
|
3 | #include <stm32f4xx_rcc.h> | |||
|
4 | #include <stm32f4xx_tim.h> | |||
|
5 | #include <stm32f4xx_dac.h> | |||
|
6 | #include <stm32f4xx_gpio.h> | |||
|
7 | #include <stm32f4xx_dma.h> | |||
|
8 | #include <stm32f4xx.h> | |||
|
9 | #include <gpio.h> | |||
|
10 | #include <stm32f4xx.h> | |||
|
11 | ||||
|
12 | ||||
|
13 | #define DAC_DHR12R2_ADDRESS 0x40007414 | |||
|
14 | #define DAC_DHR8R1_ADDRESS 0x40007410 | |||
|
15 | ||||
|
16 | #define DAC1_12bit_right_align 0x40007408 | |||
|
17 | #define DAC1_12bit_left_align 0x4000740C | |||
|
18 | #define DAC1_8bit_right_align 0x40007410 | |||
|
19 | #define DAC2_12bit_right_align 0x40007414 | |||
|
20 | #define DAC2_12bit_left_align 0x40007418 | |||
|
21 | #define DAC2_8bit_right_align 0x4000741C | |||
|
22 | #define DAC_Dual_12bit_right_align 0x40007420 | |||
|
23 | #define DAC_Dual_12bit_left_align 0x40007424 | |||
|
24 | #define DAC_Dual_8bit_right_align 0x40007428 | |||
|
25 | #define DAC_Dual_8bit_left_align 0x4000742C | |||
|
26 | ||||
|
27 | ||||
|
28 | ||||
|
29 | const TIM_TypeDef* _timer_dev_table[14]={TIM1,TIM2,TIM3,TIM4,TIM5,TIM6,TIM7, | |||
|
30 | TIM8,TIM9,TIM10,TIM11,TIM12,TIM13,TIM14}; | |||
|
31 | #define DAC1 0 | |||
|
32 | #define DAC2 1 | |||
|
33 | ||||
|
34 | #define timer2 1 | |||
|
35 | #define timer3 2 | |||
|
36 | #define timer4 3 | |||
|
37 | #define timer5 4 | |||
|
38 | #define timer6 5 | |||
|
39 | #define timer7 6 | |||
|
40 | #define timer8 7 | |||
|
41 | ||||
|
42 | DAC_InitTypeDef DAC_InitStructure; | |||
|
43 | ||||
|
44 | int dacopen(uint32_t pin) | |||
|
45 | { | |||
|
46 | #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA)) | |||
|
47 | #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8) | |||
|
48 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1 , ENABLE); | |||
|
49 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); | |||
|
50 | gpio_t DACOUT; | |||
|
51 | DACOUT = gpioopen(pin); | |||
|
52 | DACOUT |= gpioan | gpionopulltype; | |||
|
53 | gpiosetconfig(&DACOUT); | |||
|
54 | return 0; | |||
|
55 | } | |||
|
56 | ||||
|
57 | int dacsetconfig(int timer, int buffer_size, int dac,uint32_t dac_type, uint32_t freq,uint32_t data) | |||
|
58 | { | |||
|
59 | TIM_TypeDef* tim = _timer_dev_table[timer]; | |||
|
60 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; | |||
|
61 | if(timer>=timer2 && timer <= timer7)RCC_APB1PeriphClockCmd((1<<(timer-1)), ENABLE); | |||
|
62 | if(timer==timer8)RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); | |||
|
63 | uint32_t timfreq = (81300)*buffer_size/(freq); | |||
|
64 | TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); | |||
|
65 | TIM_TimeBaseStructure.TIM_Period = timfreq; | |||
|
66 | TIM_TimeBaseStructure.TIM_Prescaler = 0; | |||
|
67 | TIM_TimeBaseStructure.TIM_ClockDivision = 0; | |||
|
68 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; | |||
|
69 | TIM_TimeBaseInit(tim, &TIM_TimeBaseStructure); | |||
|
70 | TIM_SelectOutputTrigger(tim, TIM_TRGOSource_Update); | |||
|
71 | TIM_Cmd(tim, ENABLE); | |||
|
72 | ||||
|
73 | DMA_InitTypeDef DMA_InitStructure; | |||
|
74 | if (timer == timer2)DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO; | |||
|
75 | if (timer == timer4)DAC_InitStructure.DAC_Trigger = DAC_Trigger_T4_TRGO; | |||
|
76 | if (timer == timer5)DAC_InitStructure.DAC_Trigger = DAC_Trigger_T5_TRGO; | |||
|
77 | if (timer == timer6)DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; | |||
|
78 | if (timer == timer7)DAC_InitStructure.DAC_Trigger = DAC_Trigger_T7_TRGO; | |||
|
79 | if (timer == timer8)DAC_InitStructure.DAC_Trigger = DAC_Trigger_T8_TRGO; | |||
|
80 | DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; | |||
|
81 | DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; | |||
|
82 | if (dac == DAC1){ | |||
|
83 | DAC_Init(DAC_Channel_1, &DAC_InitStructure); | |||
|
84 | DMA_DeInit(DMA1_Stream5); | |||
|
85 | } | |||
|
86 | ||||
|
87 | if (dac == DAC2){ | |||
|
88 | DAC_Init(DAC_Channel_2, &DAC_InitStructure); | |||
|
89 | DMA_DeInit(DMA1_Stream6); | |||
|
90 | } | |||
|
91 | ||||
|
92 | DMA_InitStructure.DMA_Channel = DMA_Channel_7; | |||
|
93 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)dac_type; | |||
|
94 | DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)data; | |||
|
95 | DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; | |||
|
96 | DMA_InitStructure.DMA_BufferSize = buffer_size; | |||
|
97 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; | |||
|
98 | DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; | |||
|
99 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; | |||
|
100 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; | |||
|
101 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; | |||
|
102 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; | |||
|
103 | DMA_InitStructure.DMA_Priority = DMA_Priority_High; | |||
|
104 | DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; | |||
|
105 | DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; | |||
|
106 | DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; | |||
|
107 | DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; | |||
|
108 | ||||
|
109 | if (dac == DAC1){ | |||
|
110 | DMA_Init(DMA1_Stream5, &DMA_InitStructure); | |||
|
111 | DMA_Cmd(DMA1_Stream5, ENABLE); | |||
|
112 | DAC_DMACmd(DAC_Channel_1, ENABLE); | |||
|
113 | DAC_Cmd(DAC_Channel_1, ENABLE); | |||
|
114 | ||||
|
115 | } | |||
|
116 | if (dac == DAC2){ | |||
|
117 | DMA_Init(DMA1_Stream6, &DMA_InitStructure); | |||
|
118 | DMA_Cmd(DMA1_Stream6, ENABLE); | |||
|
119 | DAC_DMACmd(DAC_Channel_2, ENABLE); | |||
|
120 | DAC_Cmd(DAC_Channel_2, ENABLE); | |||
|
121 | ||||
|
122 | } | |||
|
123 | return 0; | |||
|
124 | ||||
|
125 | } | |||
|
126 | ||||
|
127 |
@@ -50,6 +50,16 int bsp_init() | |||||
50 | printf("================================================================\n\r"); |
|
50 | printf("================================================================\n\r"); | |
51 | return 1; |
|
51 | return 1; | |
52 | } |
|
52 | } | |
|
53 | void bsp_GPIO_init() | |||
|
54 | { | |||
|
55 | gpio_t LED_list[]={LED1, LED2, LED3}; | |||
|
56 | gpio_t LEDx; | |||
|
57 | for (int i=0;2;i++) | |||
|
58 | { | |||
|
59 | LEDx=gpioopen(LED_list[i]); | |||
|
60 | gpiosetdir(&LEDx,gpiooutdir); | |||
|
61 | } | |||
|
62 | } | |||
53 |
|
63 | |||
54 | void bsp_GPIO_init() |
|
64 | void bsp_GPIO_init() | |
55 | { |
|
65 | { |
@@ -27,8 +27,9 | |||||
27 | #define __MAX_OPENED_FILES__ 32 |
|
27 | #define __MAX_OPENED_FILES__ 32 | |
28 | #define __FS_ROOT_SIZE__ 32 |
|
28 | #define __FS_ROOT_SIZE__ 32 | |
29 |
|
29 | |||
30 |
#define LED1 P |
|
30 | #define LED1 PA0 | |
31 |
#define LED2 P |
|
31 | #define LED2 PA1 | |
|
32 | #define LED3 PA2 | |||
32 |
|
33 | |||
33 | extern float VREF0; |
|
34 | extern float VREF0; | |
34 |
|
35 |
@@ -11,7 +11,7 SOURCES += bsp.c | |||||
11 |
|
11 | |||
12 | HEADERS += bsp.h |
|
12 | HEADERS += bsp.h | |
13 |
|
13 | |||
14 | LIBS+= -lgpio -luart -li2c -lspi -lpwm |
|
14 | LIBS+= -lgpio -luart -li2c -lspi -lpwm -ldac | |
15 |
|
15 | |||
16 | BSPFILE = bsp.pri |
|
16 | BSPFILE = bsp.pri | |
17 |
|
17 |
@@ -11,8 +11,7 SUBDIRS += STM32F4Discovery \ | |||||
11 | OPLAYER \ |
|
11 | OPLAYER \ | |
12 | STM32-E407 \ |
|
12 | STM32-E407 \ | |
13 | STM32F429Discovery \ |
|
13 | STM32F429Discovery \ | |
14 |
STM32F4Discovery_35LCD |
|
14 | STM32F4Discovery_35LCD | |
15 | Nano-particle |
|
|||
16 |
|
15 | |||
17 |
|
16 | |||
18 |
|
17 |
@@ -36,6 +36,7 extern void reset_AHB2(); | |||||
36 | extern void reset_APB1(); |
|
36 | extern void reset_APB1(); | |
37 | extern void reset_APB2(); |
|
37 | extern void reset_APB2(); | |
38 | extern void configureSysTick(); |
|
38 | extern void configureSysTick(); | |
|
39 | extern void delay_us(uint32_t value); | |||
39 | extern void delay_100us(uint32_t value); |
|
40 | extern void delay_100us(uint32_t value); | |
40 | extern void SysTick_Handler(void); |
|
41 | extern void SysTick_Handler(void); | |
41 |
|
42 |
@@ -8,6 +8,7 SUBDIRS = CORE/core.pro \ | |||||
8 | SPI/spi.pro \ |
|
8 | SPI/spi.pro \ | |
9 | I2C/i2c.pro \ |
|
9 | I2C/i2c.pro \ | |
10 | PWM/pwm.pro \ |
|
10 | PWM/pwm.pro \ | |
|
11 | DAC/dac.pro\ | |||
11 | SDCARD-SDIO/sdcard-sdio.pro |
|
12 | SDCARD-SDIO/sdcard-sdio.pro | |
12 |
|
13 | |||
13 |
|
14 |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now