您尚未登录。

楼主 # 2023-12-08 10:07:02

xred
会员
注册时间: 2023-12-08
已发帖子: 2
积分: 12

STM32G030F6P6这个mcu有用过的吗, ADC是不是很拉跨?

如题,测试发现这个adc真大很烂,漂的很厉害,有用过的大佬吗?


static void ADC_Config()
{
    // __IO uint32_t wait_loop_index = 0U;

    LL_ADC_InitTypeDef ADC_InitStruct = { 0 };
    LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = { 0 };
    LL_GPIO_InitTypeDef GPIO_InitStruct = { 0 };

    // LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_SYSCLK);
    LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC);

    // ADC1 GPIO Configuration PA3   ------> ADC1_IN3
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
    GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    ADC_InitStruct.Clock = LL_ADC_CLOCK_SYNC_PCLK_DIV2;
    ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B;
    ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
    ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE;
    LL_ADC_Init(ADC1, &ADC_InitStruct);
    LL_ADC_REG_SetSequencerConfigurable(ADC1, LL_ADC_REG_SEQ_CONFIGURABLE);

    /* Poll for ADC channel configuration ready */
    while (LL_ADC_IsActiveFlag_CCRDY(ADC1) == 0) { }
    LL_ADC_ClearFlag_CCRDY(ADC1);

    ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
    ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
    ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
    ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_SINGLE;
    ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
    ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_PRESERVED;
    LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct);
    LL_ADC_SetOverSamplingScope(ADC1, LL_ADC_OVS_DISABLE);
    LL_ADC_SetTriggerFrequencyMode(ADC1, LL_ADC_CLOCK_FREQ_MODE_LOW);

    LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_COMMON_1, LL_ADC_SAMPLINGTIME_79CYCLES_5);
    LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_COMMON_2, LL_ADC_SAMPLINGTIME_79CYCLES_5);
    LL_ADC_DisableIT_EOC(ADC1);
    LL_ADC_DisableIT_EOS(ADC1);

    /* Enable ADC internal voltage regulator */
    LL_ADC_EnableInternalRegulator(ADC1);
    LL_mDelay(1);

    // 调用这个之前必须要EnableInternalRegulator
    LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_3);

    while (LL_ADC_IsActiveFlag_CCRDY(ADC1) == 0) { }
    LL_ADC_ClearFlag_CCRDY(ADC1);

    LL_ADC_SetChannelSamplingTime(ADC1, LL_ADC_CHANNEL_3, LL_ADC_SAMPLINGTIME_COMMON_1);

    if (LL_ADC_IsEnabled(ADC1) == 0) {
        LL_mDelay(100);

        LL_ADC_EnableInternalRegulator(ADC1);
        LL_mDelay(1);

        // 校准
        LL_ADC_StartCalibration(ADC1);
        while (LL_ADC_IsCalibrationOnGoing(ADC1) != 0) { }

        LL_ADC_Enable(ADC1);
        /* Poll for ADC ready to convert */
        while (LL_ADC_IsActiveFlag_ADRDY(ADC1) == 0) { }
        DebugPrint("adc ready\n");
    }
}

离线

#1 2023-12-08 14:39:03

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: STM32G030F6P6这个mcu有用过的吗, ADC是不是很拉跨?

这是低成本低管脚芯片,没有分开数字电源和模拟电源,不要指望它的指标有多好。
想要指标好就老老实实加钱,用起码有单独模拟电源输入的芯片。

离线

#2 2023-12-09 08:48:11

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: STM32G030F6P6这个mcu有用过的吗, ADC是不是很拉跨?

我好像看到有说法是stm32g系列的adc要比stm32f103系列列的好。

离线

楼主 #3 2023-12-09 18:35:39

xred
会员
注册时间: 2023-12-08
已发帖子: 2
积分: 12

Re: STM32G030F6P6这个mcu有用过的吗, ADC是不是很拉跨?

经过反复测试和研究,其实这个ADC勉强还凑合,主要是好像没有vref引脚,参考电压直接vcc,所以vcc不能有波动,vcc加了个大电容,adc看起来不错了,
不过比f103还是不如,103很稳,这个感觉还是漂.

离线

#4 2023-12-11 14:48:12

alchmeow
会员
注册时间: 2023-12-11
已发帖子: 1
积分: 1

Re: STM32G030F6P6这个mcu有用过的吗, ADC是不是很拉跨?

STM32F030 8脚那个版本 还有一批SPI有bug。。。

离线

#5 2023-12-11 15:17:23

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: STM32G030F6P6这个mcu有用过的吗, ADC是不是很拉跨?

发现又出了个stm32c0系列单片机。这样0尾缀就有C0, F0, G0三个系列了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn