stm8L ADC+DMA,DMA不产生中断
如题,stm8L051单片机,多通道采样DMA传输,DMA不产生中断,没有采样到数据。初始化函数如下:volatileu16 ADC_ConvertedValue;
#defineADC_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);
}
没有采集到数据,当然不会有DMA中断。
ADC输入要配置模拟输入通道。先搞定ADC的非DMA采样,再搞DMA吧 代码是OK的
页:
[1]