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);
|