问答

汇集网友智慧,解决技术难题

小炎宇

TA的家园币:20  

  • GD32F470双ADC采集问题

    本帖最后由小炎宇于2024-9-3012:38编辑在使用GD32F470的ADC0和ADC2分别采集数据,并使能DMA传输数据时,发现采集到4个通道的数据,总会有一个通道的数据是0.但每次采集数据为0的通道并不固定,于是放大了DMA存储数据的目标地址缓冲区大小,发现,通道数据为0的位置已经固定且很有规律,不知道是哪里配置的问题,adc初始化时选择的模式是“全部ADC规则并行模式”(因为工程的宏中没有ADC0与ADC2规则并行模式),想请问出现这种情况是否是,把未使能的ADC1的通道数据也算上了,导致每次采集数据,三个通道轮番采集了一遍,还是说数据存储格式有问题,烦请各位大佬帮忙查看一下,下面是初始化代码和采集到的数据的现象。代码:uint16_tga_adc_dmabuf[ADC_SAMPLE_CH_BUTT]={0};//ADC_SAMPLE_CH_BUTT原本为4,现在为6voiddma_config(void){/*ADC_DMA_channelconfiguration*/dma_single_data_parameter_structdma_data_parameter;/*enableDMA1clock*/rcu_periph_clock_enable(RCU_DMA1);dma_deinit(DMA1,DMA_CH0);/*initializeDMAsingledatamode*/dma_data_parameter.periph_addr=(uint32_t)(&ADC_SYNCDATA);dma_data_parameter.periph_inc=DMA_PERIPH_INCREASE_DISABLE;dma_data_parameter.memory0_addr=(uint32_t)ga_adc_dmabuf;dma_data_parameter.memory_inc=DMA_MEMORY_INCREASE_ENABLE;dma_data_parameter.periph_memory_width=DMA_PERIPH_WIDTH_16BIT;dma_data_parameter.circular_mode=DMA_CIRCULAR_MODE_ENABLE;dma_data_parameter.direction=DMA_PERIPH_TO_MEMORY;dma_data_parameter.number=ADC_SAMPLE_CH_BUTT;//现在扩大为6,原本只采集4个dma_data_parameter.priority=DMA_PRIORITY_HIGH;dma_single_data_mode_init(DMA1,DMA_CH0,&dma_data_parameter);/*DMAchannel0peripheralselect*/dma_channel_subperipheral_select(DMA1,DMA_CH0,DMA_SUBPERI0);/*enableDMAchannel*/dma_channel_enable(DMA1,DMA_CH0);}intc