-
GD32A503RDT3 ADC+DMA顺序转换问题,没有数据
void rcu_config(void) { /* enable GPIO clock */ rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOE); /* enable ADC0 clock */ rcu_periph_clock_enable(RCU_ADC0); /* enable DMA0 clock */ rcu_periph_clock_enable(RCU_DMA0); } /*! \brief configure the GPIO peripheral \param[in] none \param[out] none \retval none */ void gpio_config(void) { /* config the GPIO as analog mode */ gpio_mode_set(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_1);//GPIOB1, gpio_mode_set(GPIOE, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_13); } /*! \brief configure the DMA peripheral \param[in] none \param[out] none \retval none */ void dma_config(void) { /* ADC_DMA_channel configuration */ dma_parameter_struct dma_data_parameter; /* ADC DMA_channel configuration */ dma_deinit(DMA0, DMA_CH0); /* initialize DMA single data mode */ dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));//外设基地址 dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;//内存地址增量模式 dma_data_parameter.memory_addr = (uint32_t)adc_value;//数据存放地址 dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;//内存地址增量模式 dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;//dma外设宽度16位,半字 dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT; dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;//传输模式,外设到存储(接收) dma_data_parameter.number = 2;//长度 dma_data_parameter.priority = DMA_PRIORITY_HIGH;//优先级高 dma_init(DMA0, DMA_CH0, &dma_data_parameter); dma_circulation_enable(DMA0, DMA_CH0); /* enable DMA channel */ dma_channel_enable(DMA0, DMA_CH0); } /*! \brief configure the ADC peripheral \param[in] none \param[out] none \retval none */ void adc_config(void) { /* config ADC clock */ rcu_adc_clock_config(RCU_CKADC_CKAHB_DIV10); adc_deinit(ADC0); adc_mode_config(ADC_MODE_FREE);//ADC工作在独立模式 /* ADC continous function enable */ adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); /* ADC trigger config */ adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);//外部触发源设置 /* ADC data alignment config */ adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);//数据对齐配置 /* ADC channel length config */ adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);//用到几个转换通道 /* ADC regular channel config */ adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5); adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5); adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); /* enable ADC interface */ adc_enable(ADC0); /* ADC DMA function enable */ adc_dma_mode_enable(ADC0); /* ADC calibration and reset calibration */ adc_calibration_enable(ADC0); } main.c /* system clocks configuration */ rcu_config(); /* GPIO configuration */ gpio_config(); /* DMA configuration */ dma_config(); /* ADC configuration */ adc_config(); adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
4255浏览量 25回复量 关注量