
如题,stm8L051单片机,多通道采样DMA传输,DMA不产生中断,没有采样到数据。初始化函数如下: volatile u16 ADC_ConvertedValue[3]; #define ADC_DRH_ADRESS 0x5344 void DMA_ADC_Initial(void) { GPIO_Init(GPIOB , GPIO_Pin_0 , GPIO_Mode_In_FL_No_IT); //AD通道18 , 设置PB0 为悬空输入,并中断禁止 GPIO_Init(GPIOD , GPIO_Pin_0 , GPIO_Mode_In_FL_No_IT); //AD通道22 , 设置PD0 为悬空输入,并中断禁止 /* Enable ADC1 clock */ CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE); Delay2(100); /* Enable DMA1 clock */ CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE); Delay2(100); DMA_GlobalDeInit(); DMA_DeInit(DMA1_Channel0); ADC_DeInit(ADC1); /* Initialize and configure ADC1 */ ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2); ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles); ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 Channels 1 */ ADC_ChannelCmd(ADC1, ADC_Channel_18, ENABLE); /* connected to Potentiometer RV */ /* Enable ADC1 Channels 2 */ ADC_ChannelCmd(ADC1, ADC_Channel_22, ENABLE); /* connected to Potentiometer RV */ // Vref ADC_VrefintCmd(ENABLE); ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE); ADC_SchmittTriggerConfig(ADC1, ADC_Channel_Vrefint, DISABLE); /* Connect ADC to DMA channel 0 */ SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0); DMA_Init(DMA1_Channel0, (uint32_t)ADC_ConvertedValue, ADC_DRH_ADRESS, 3, DMA_DIR_PeripheralToMemory, DMA_Mode_Circular, DMA_MemoryIncMode_Inc, DMA_Priority_High, DMA_MemoryDataSize_HalfWord); /* DMA Channel0 enable */ DMA_Cmd(DMA1_Channel0, ENABLE); /* Enable DMA1 channel0 Transfer complete interrupt */ DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE); /* DMA enable */ DMA_GlobalCmd(ENABLE); /* Enable ADC1 DMA requests*/ ADC_DMACmd(ADC1, ENABLE); Delay2(1000); /* start ADC convertion by software */ ADC_SoftwareStartConv(ADC1); } |
ADC输入要配置模拟输入通道。先搞定ADC的非DMA采样,再搞DMA吧