这一段代码是ADC0的,可以正常使用,但是当换成ADC2和他所对应的gpio引脚时却无法看到结果,想请教一下大佬帮助
#include "gd32f4xx.h"
#include <stdio.h>
#include "systick.h"
#include "gd32f4xx_eval.h"
uint16_t adc_value[8];
void rcu_config(void);
void gpio_config(void);
void dma_config(void);
void adc_config(void);
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
/* system clocks configuration */
rcu_config();
/* GPIO configuration */
gpio_config();
/* SYSTICK configuration */
systick_config();
/* DMA configuration */
dma_config();
/* ADC configuration */
adc_config();
while(1){
/* delay 1s */
delay_1ms(1000);
/* ADC software trigger enable */
adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL);
}
}
/*!
\brief configure the different system clocks
\param[in] none
\param[out] none
\retval none
*/
void rcu_config(void)
{
/* enable GPIOC clock */
rcu_periph_clock_enable(RCU_GPIOA);
/* enable ADC clock */
rcu_periph_clock_enable(RCU_ADC0);
/* enable DMA clock */
rcu_periph_clock_enable(RCU_DMA1);
/* config ADC clock */
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
}
/*!
\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(GPIOA,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
gpio_mode_set(GPIOA,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
}
/*!
\brief configure the DMA peripheral
\param[in] none
\param[out] none
\retval none
*/
void dma_config(void)
{
dma_single_data_parameter_struct dma_single_data_parameter;
/* ADC DMA_channel configuration */
dma_deinit(DMA1,DMA_CH0);
/* initialize DMA single data mode */
dma_single_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
dma_single_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_single_data_parameter.memory0_addr = (uint32_t)(adc_value);
dma_single_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_16BIT;
dma_single_data_parameter.circular_mode = DMA_CIRCULAR_MODE_ENABLE;
dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY;
dma_single_data_parameter.number = 8;
dma_single_data_parameter.priority = DMA_PRIORITY_HIGH;
dma_single_data_mode_init(DMA1,DMA_CH0,dma_single_data_parameter);
/* enable DMA channel */
dma_channel_enable(DMA1,DMA_CH0);
}
/*!
\brief configure the ADC peripheral
\param[in] none
\param[out] none
\retval none
*/
void adc_config(void)
{
/* ADC channel length config */
adc_channel_length_config(ADC0,ADC_REGULAR_CHANNEL,8);
/* ADC regular channel config */
adc_regular_channel_config(ADC0,0,ADC_CHANNEL_0,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,1,ADC_CHANNEL_1,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,2,ADC_CHANNEL_2,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,3,ADC_CHANNEL_3,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,4,ADC_CHANNEL_4,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,5,ADC_CHANNEL_5,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,6,ADC_CHANNEL_6,ADC_SAMPLETIME_144);
adc_regular_channel_config(ADC0,7,ADC_CHANNEL_7,ADC_SAMPLETIME_144);
/* ADC data alignment config */
adc_data_alignment_config(ADC0,ADC_DATAALIGN_RIGHT);
/* ADC discontinuous mode */
adc_discontinuous_mode_config(ADC0,ADC_REGULAR_CHANNEL,3);
/* enable ADC interface */
adc_enable(ADC0);
/* ADC calibration and reset calibration */
adc_calibration_enable(ADC0);
/* ADC DMA function enable */
adc_dma_mode_enable(ADC0);
adc_dma_request_after_last_enable(ADC0);
}
|