1  | DMA_InitTypeDef  DMA_InitStructure;
  | 
2  | ADC_InitTypeDef  ADC_InitStructure;
  | 
3  | NVIC_InitTypeDef NVIC_InitStructure;
  | 
4  | 
  | 
5  | RCC_ADCCLKConfig(RCC_PCLK2_Div6);
  | 
6  | 
  | 
7  | /* Enable peripheral clocks 
  | 
8  | /* Enable DMA1 clock */
  | 
9  | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  | 
10  | 
  | 
11  | /* Enable ADC1 Periph clock */
  | 
12  | RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  | 
13  | 
  | 
14  | 
  | 
15  | /* Enable DMA1 channel5 IRQ Channel */
  | 
16  | NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  | 
17  | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  | 
18  | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  | 
19  | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  | 
20  | NVIC_Init(&NVIC_InitStructure);
  | 
21  | 
  | 
22  | DMA_DeInit(DMA1_Channel1);
  | 
23  | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);
  | 
24  | DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&dma_buf;
  | 
25  | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  | 
26  | DMA_InitStructure.DMA_BufferSize = 1;
  | 
27  | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  | 
28  | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  | 
29  | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  | 
30  | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  | 
31  | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  | 
32  | DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  | 
33  | DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  | 
34  | DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  | 
35  | 
  | 
36  | ADC_DeInit(ADC1);
  | 
37  | 
  | 
38  | ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  | 
39  | ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  | 
40  | ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  | 
41  | ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  | 
42  | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  | 
43  | ADC_InitStructure.ADC_NbrOfChannel = 1;
  | 
44  | ADC_Init(ADC1, &ADC_InitStructure);
  | 
45  | 
  | 
46  | /* ADC1 RegularChannelConfig Test */
  | 
47  | ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_28Cycles5);
  | 
48  | 
  | 
49  | /* Enable DMA1 Channel6 Transfer Complete interrupt */
  | 
50  | DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
  | 
51  | 
  | 
52  | /* Enable DMA1 Channel5 */
  | 
53  | DMA_Cmd(DMA1_Channel1, ENABLE);
  | 
54  | 
  | 
55  | ADC_DMACmd(ADC1, ENABLE);
  | 
56  | ADC_Cmd(ADC1, ENABLE);
  | 
57  | 
  | 
58  | /* Enable ADC1 reset calibaration register */
  | 
59  | ADC_ResetCalibration(ADC1);
  | 
60  | 
  | 
61  | /* Check the end of ADC1 reset calibration register */
  | 
62  | while(ADC_GetResetCalibrationStatus(ADC1));
  | 
63  | 
  | 
64  | /* Start ADC1 calibaration */
  | 
65  | ADC_StartCalibration(ADC1);
  | 
66  | 
  | 
67  | /* Check the end of ADC1 calibration */
  | 
68  | while(ADC_GetCalibrationStatus(ADC1));
  | 
69  | 
  | 
70  | /* Start ADC1 conversion */
  | 
71  | ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  |