搜索

[研电赛技术支持] GD32F407ZET的例程使用ADC2为什么没有输出结果而ADC0可以正常...

[复制链接]
1028|6
coreyjie|  楼主 | 2021-6-9 10:50 | 显示全部楼层 |阅读模式
在使用GD32F407ZET时需要引出13路ADC来实现输入并参与控制,但是根据例程的ADC进行修改仅实现了7路ADC0的通道测试,ADC1和ADC2却无法直接替换使用,想请教一下解决方案,万分感谢赐教指导

使用特权

评论回复
coreyjie|  楼主 | 2021-6-24 15:27 | 显示全部楼层
这一段代码是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);
}


使用特权

评论回复
sonicll| | 2021-6-9 11:23 | 显示全部楼层
ADC2的通道pin脚,有一些是独立的,和ADC0/ADC1不共用,需要参考datasheet。还有ADC1不能单独使用DMA功能

使用特权

评论回复
redone| | 2021-6-9 13:48 | 显示全部楼层
ADC初始化,时钟和IO,关注一下。

使用特权

评论回复
lidi911| | 2021-6-9 20:50 | 显示全部楼层
有些引脚是共用的,看下数据手册管脚分配。

使用特权

评论回复
coreyjie|  楼主 | 2021-6-24 11:20 | 显示全部楼层
具有复用功能的接口无法被adc2使用吗
Snipaste_2021-06-24_11-18-12.png

使用特权

评论回复
sonicll| | 2021-6-24 13:40 | 显示全部楼层
coreyjie 发表于 2021-6-24 11:20
具有复用功能的接口无法被adc2使用吗

你还是把代码贴出来吧

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 kk的回忆 得到打赏 ¥600.00
  • 2 名字还没想好 得到打赏 ¥350.00
  • 3 天意无罪 得到打赏 ¥312.00
  • 4 wolfe_yu 得到打赏 ¥210.00
  • 5 呐咯密密 得到打赏 ¥170.00
  • 6 gaoyang9992006 得到打赏 ¥120.00
  • 7 CZF11 得到打赏 ¥100.00
  • 8 年轻的国王 得到打赏 ¥90.00
  • 9 hunteredward 得到打赏 ¥90.00
  • 10 blust5 得到打赏 ¥85.00
在线客服 快速回复 返回顶部 返回列表