打印

GD32F103 AD采样问题

[复制链接]
14152|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luzimo_pan|  楼主 | 2021-7-21 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD32F103 IO口设置成模拟输入时,发现IO口有高电平输出,导致ad采样电压偏高,不知道怎么解决?

使用特权

评论回复
沙发
luzimo_pan|  楼主 | 2021-7-21 10:30 | 只看该作者
具体代码如下:
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_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
    dma_data_parameter.direction    = DMA_PERIPHERAL_TO_MEMORY;
    dma_data_parameter.number       = 5U;
    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);
}
void adcinit(void)
{        
       
        rcu_periph_clock_enable(RCU_GPIOA);
        gpio_init(GPIOA,GPIO_MODE_AIN,GPIO_OSPEED_2MHZ, GPIO_PIN_6|GPIO_PIN_7);
        rcu_periph_clock_enable(RCU_GPIOB);
                gpio_init(GPIOB,GPIO_MODE_AIN,GPIO_OSPEED_50MHZ, GPIO_PIN_0);
        rcu_periph_clock_enable(RCU_GPIOC);
        gpio_init(GPIOC,GPIO_MODE_AIN,GPIO_OSPEED_50MHZ, GPIO_PIN_5);

           /* enable DMA0 clock */
    rcu_periph_clock_enable(RCU_DMA0);  
                dma_config();
           rcu_periph_clock_enable(RCU_ADC0);
          /* config ADC clock */
                rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV4);
    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
            /* reset ADC */
   adc_deinit(ADC0);
    /* ADC mode config */
    adc_mode_config(ADC_MODE_FREE);
                adc_tempsensor_vrefint_enable();
    /* ADC contineous function enable */
    adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
    /* ADC scan mode disable */
    adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
    /* ADC data alignment config */
    adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
    /* ADC channel length config */
    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 5);

    /* ADC regular channel config */
    adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_6, ADC_SAMPLETIME_239POINT5);
    adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_7, ADC_SAMPLETIME_239POINT5);
    adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_15, ADC_SAMPLETIME_239POINT5);
    adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_8, ADC_SAMPLETIME_239POINT5);
          adc_regular_channel_config(ADC0, 4, ADC_CHANNEL_17, ADC_SAMPLETIME_239POINT5);
    /* ADC trigger config */
    adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
    adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
   
    /* enable ADC interface */
    adc_enable(ADC0);
    delay_1ms(1);
    /* ADC calibration and reset calibration */
    adc_calibration_enable(ADC0);

    /* ADC DMA function enable */
    adc_dma_mode_enable(ADC0);
    /* ADC software trigger enable */
    adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);


}

使用特权

评论回复
板凳
zhiyong1820| | 2021-7-30 11:18 | 只看该作者
遇到同样的问题,楼主解决问题了吗?

使用特权

评论回复
地板
caigang13| | 2021-8-2 08:20 | 只看该作者
有高电平输出?不是配置为输入模式嘛?

使用特权

评论回复
评论
zhiyong1820 2021-8-3 20:40 回复TA
是的,配置成模拟输入,但是输入口的电压莫名升高导致采样不准确 
5
zhiyong1820| | 2021-8-3 20:39 | 只看该作者
持续关注中。。。。。。。

使用特权

评论回复
6
chenjun89| | 2021-8-3 21:00 | 只看该作者
是不是被旁边的引脚或者电路干扰了

使用特权

评论回复
7
zhiyong1820| | 2021-8-5 11:51 | 只看该作者
chenjun89 发表于 2021-8-3 21:00
是不是被旁边的引脚或者电路干扰了

没有,把程序擦除掉,AD口电压就正常了,但是只要程序运行起来电压就莫名升高了,示波器看确实有一段一段的电压叠加

使用特权

评论回复
8
mutable| | 2021-8-6 17:44 | 只看该作者
能贴下示波器的波形么

使用特权

评论回复
9
zhiyong1820| | 2021-8-9 11:44 | 只看该作者
mutable 发表于 2021-8-6 17:44
能贴下示波器的波形么

不知道怎么上传图片,波形示意图是这样的 __------__-----__-----__------__---- 下面那线是AD口正常电压,上面的线是被抬高后的电压,芯片未运行时是只有下面那一条线,芯片运行后的波形就如这个示意图一样了。

使用特权

评论回复
10
redone| | 2021-8-9 15:19 | 只看该作者
关注下~~
顺便说一下,
其实直接截屏粘贴到回复框就可以贴图片

使用特权

评论回复
11
mutable| | 2021-8-9 17:37 | 只看该作者
zhiyong1820 发表于 2021-8-9 11:44
不知道怎么上传图片,波形示意图是这样的 __------__-----__-----__------__---- 下面那线是AD口正常电压 ...

额~~你这个示意图,我服

使用特权

评论回复
12
huquanz711| | 2021-8-10 07:40 | 只看该作者
你又没配置成输出怎么会有高电压输出,看下硬件是不是有问题。

使用特权

评论回复
13
zhiyong1820| | 2021-8-10 15:43 | 只看该作者
huquanz711 发表于 2021-8-10 07:40
你又没配置成输出怎么会有高电压输出,看下硬件是不是有问题。

硬件没问题,用ST芯片就是正常的

使用特权

评论回复
14
Lindaic| | 2021-9-14 16:44 | 只看该作者
楼主问题解决了吗?

使用特权

评论回复
15
jiafeiguai| | 2021-10-27 19:07 | 只看该作者
我这两天刚遇到了同样的问题,请问楼主解决了么

使用特权

评论回复
16
Johnny_dxj| | 2022-12-22 20:52 | 只看该作者
有人解决了吗,我是用的GD32F103CBT6,PB0,PB1设成模拟输入,万用表均能测到0.5V左右稳定的电压,改成浮空输入没电压,但AD有测不到了!
有经历过的吗,希望分享解决方法!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝