1 | void ADC_DMA_Config(void){
|
2 |
|
3 |
|
4 | RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div2);
|
5 |
|
6 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE);
|
7 |
|
8 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
|
9 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
|
10 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
|
11 |
|
12 |
|
13 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;
|
14 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
15 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
16 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
17 |
|
18 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
|
19 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
20 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
21 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
22 |
|
23 | ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
|
24 | ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
|
25 | ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
|
26 | ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_OneShot;
|
27 | ADC_CommonInitStructure.ADC_TwoSamplingDelay = 10;
|
28 |
|
29 | ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
|
30 |
|
31 | ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Disable;
|
32 | ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
|
33 | ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;
|
34 | ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
|
35 | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
|
36 | ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;
|
37 | ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;
|
38 | ADC_InitStructure.ADC_NbrOfRegChannel = 2;
|
39 | ADC_Init(ADC1, &ADC_InitStructure);
|
40 |
|
41 | /* ADC1 regular channel7 configuration */
|
42 | ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_7Cycles5);
|
43 | ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 2, ADC_SampleTime_7Cycles5);
|
44 |
|
45 |
|
46 | DMA_StructInit(&DMA_InitStructure);
|
47 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);
|
48 | DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCBuffer;
|
49 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
|
50 | DMA_InitStructure.DMA_BufferSize = 2;
|
51 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
52 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
53 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
54 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
55 | DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
56 | DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
|
57 | DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
|
58 | DMA_Init(DMA1_Channel1, &DMA_InitStructure);
|
59 | DMA_ClearITPendingBit(DMA1_IT_TC1);
|
60 | DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
|
61 |
|
62 |
|
63 | NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
|
64 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
65 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
66 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
67 | NVIC_Init(&NVIC_InitStructure);
|
68 |
|
69 |
|
70 | ADC_DMAConfig( ADC1, ADC_DMAMode_OneShot);
|
71 | ADC_DMACmd(ADC1, ENABLE);
|
72 | ADC_Cmd(ADC1, ENABLE);
|
73 | }
|