- void adc_dma_init()
- {
- DMA_InitTypeDef DMA_InitStruct;
- RCC_AHBPeriphClockCmd(RCC_AHBENR_DMA1, ENABLE);
- DMA_DeInit(DMA1_Channel1);
- DMA_StructInit(&DMA_InitStruct);
- //DMA transfer peripheral address
- DMA_InitStruct.DMA_PeripheralBaseAddr = (u32) & (ADC1->DR);
- //DMA transfer memory address
- DMA_InitStruct.DMA_MemoryBaseAddr = (u32)&adcBuf;
- //DMA transfer direction from peripheral to memory
- DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;
- //DMA cache size
- DMA_InitStruct.DMA_BufferSize = ADC_DMA_BUF_SIZE;
- //After receiving the data, the peripheral address is forbidden to move
- //backward
- DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- //After receiving the data, the memory address is shifted backward
- DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
- //Define the peripheral data width to 16 bits
- DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
- //Define the memory data width to 16 bits
- DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
- //Cycle conversion mode
- DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
- //DMA priority is high
- DMA_InitStruct.DMA_Priority = DMA_Priority_High;
- //M2M mode is disabled
- DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
- DMA_InitStruct.DMA_Auto_reload = DMA_Auto_Reload_Disable;
- DMA_Init(DMA1_Channel1, &DMA_InitStruct);
- DMA_Cmd(DMA1_Channel1, ENABLE);
- ADC_InitTypeDef ADC_InitStruct;
- ADC_StructInit(&ADC_InitStruct);
- //Initialize PA1 to analog input mode
- //Enable ADC clock
- RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1, ENABLE);
- ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
- //ADC prescale factor
- ADC_InitStruct.ADC_PRESCARE = ADC_PCLK2_PRESCARE_17;
- //Set ADC mode to continuous conversion mode
- ADC_InitStruct.ADC_Mode = ADC_Mode_Continue;
- //AD data right-justified
- ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
- ADC_Init(ADC1, &ADC_InitStruct);
- GPIO_InitTypeDef GPIO_InitStruct;
- RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOC, ENABLE);
- GPIO_StructInit(&GPIO_InitStruct);
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
- //PC3 ADC_IN13
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
- GPIO_Init(GPIOC, &GPIO_InitStruct);
- //Enable the channel
- ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 0, ADC_Samctl_240_5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 0, ADC_Samctl_240_5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 0, ADC_Samctl_240_5);
- // ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 0, ADC_Samctl_240_5);
- // ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 0, ADC_Samctl_240_5);
- //ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 0, ADC_Samctl_240_5);
- //ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 0, ADC_Samctl_240_5);
- // ADC_RegularChannelConfig(ADC1, 13, 0, ADC_Samctl_240_5);//通道13
- ADC_RegularChannelConfig(ADC1, ADC_Channel_Vrefint, 0, ADC_Samctl_240_5);
-
- ADC_ANY_CH_Config(ADC1,0,ADC_Channel_0);
- ADC_ANY_CH_Config(ADC1,1,ADC_Channel_1);
- ADC_ANY_CH_Config(ADC1,2,ADC_Channel_2);
- ADC_ANY_CH_Config(ADC1,3,ADC_Channel_Vrefint);
- ADC_ANY_NUM_Config(ADC1,3);//
- ADC1->ANYCR |= ADC_ANY_CR_CHANY_MDEN;//开启任意通道
- ADC_TempSensorVrefintCmd(ENABLE);
- //Enable ADCDMA
- ADC_DMACmd(ADC1, ENABLE);
- //Enable AD conversion
- ADC_Cmd(ADC1, ENABLE);
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
- }