打印

GD32F130K8单片机ADC查询单次转换模式

[复制链接]
1381|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duo点|  楼主 | 2021-9-2 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

ADC要配置成单次转换模式,每次转换的通道不一样,下面的配置代码和每次获取转换结果是否有问题?


其中

ADC_Configuration这个是配置,在初始化调用,

ADC_Get_Result这个是获取转换结果,在main函数的主循环中调用,每次将需要转换的通道ch传进来,然后返回通道ch的转换结果。


uint16_t ADC_Get_Result(uint8_t ch)
{
    uint8_t i;
    uint16_t ADResult;


    /* ADC regular channel config */
    adc_regular_channel_config(0, ch, ADC_SAMPLETIME_55POINT5);


    ADResult = 0x0000;
    for(i = 0; i < 5; i++)
    {
        adc_software_trigger_enable(ADC_REGULAR_CHANNEL);

        while(!adc_flag_get(ADC_FLAG_EOC))
        {
            ;
        }
        ADResult += ADC_RDATA;
        adc_flag_clear(ADC_FLAG_EOC);
    }
   
    return ADResult /5;    // 返回ADC结果
}

/**
  * @brief  Configure ADC.
  * @param  None
  * @retval None
  */
void ADC_Configuration(void)
{
    /* enable ADC1 clock */
    rcu_periph_clock_enable(ADC_RCC);
    /* config ADC clock */
    rcu_adc_clock_config(RCU_ADCCK_APB2_DIV4);
   
    /* ADC contineous function enable */
    adc_special_function_config(ADC_CONTINUOUS_MODE, DISABLE);
    /* ADC trigger config */
    adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_SWRCST);
    /* ADC data alignment config */
    adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
    /* ADC channel length config */
    adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);

    /* ADC regular channel config */
    adc_regular_channel_config(0, ADC_V_CHANL, ADC_SAMPLETIME_55POINT5);
    /* ADC external trigger enable */
    adc_external_trigger_config(ADC_REGULAR_CHANNEL,ENABLE);
  
    /* 16 times sample, 4 bits shift */  // 使用过采样,硬件求平均值,GD32F130系列不支持
    //adc_oversample_mode_config(ADC_OVERSAMPLING_ALL_CONVERT, ADC_OVERSAMPLING_SHIFT_4B, ADC_OVERSAMPLING_RATIO_MUL16);
    //adc_oversample_mode_enable();

    /* ADC resolusion 6B */
    //adc_resolution_config(ADC_RESOLUTION_12B);    // GD32F130系列不支持


    adc_enable();

    delay_1ms();
    adc_calibration_enable();
}


使用特权

评论回复
沙发
一刀一级| | 2021-9-2 16:40 | 只看该作者

GD32F130系列不支持求平均值?

使用特权

评论回复
板凳
onlycook| | 2021-9-2 16:41 | 只看该作者

还有单片机的adc可以求平均值?

使用特权

评论回复
地板
match007| | 2021-9-2 20:21 | 只看该作者
平均值,是自己做数据处理好不好?

使用特权

评论回复
5
xdqfc| | 2021-9-3 11:40 | 只看该作者
楼主的意思,可能是假如4个通道,想求每个通道的5次平均值,每转换5次结束,换一个通道采样,再5次后再换下一个通道,说心里话,真是浪费GD32的好资源了,完全可以一次用插入组就把4个通道全部转换完成,另外程序里面加while,又没有跳出语句,万一死里面直接玩完。

使用特权

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

本版积分规则

440

主题

1669

帖子

1

粉丝