虚空藏戒子 发表于 2020-9-9 17:37:15

stm32l475 ADC采集失效问题求助( 问题已解决)

正常为3.3v4095,结果采到的值为0,以下为配置

void ADC1_Init(void)
{

/* USER CODE BEGIN ADC1_Init 0 */

/* USER CODE END ADC1_Init 0 */

LL_ADC_InitTypeDef ADC_InitStruct = {0};
LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = {0};
LL_ADC_CommonInitTypeDef ADC_CommonInitStruct = {0};

LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

/* Peripheral clock enable */
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_ADC);

LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
      LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_SYSCLK);

GPIO_InitStruct.Pin = ADC2_IN5_BAT_Pin|ADC2_IN6_Pin|ADC2_IN7_Pin|ADC2_IN8_Type_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

LL_GPIO_EnablePinAnalogControl(GPIOA, ADC2_IN5_BAT_Pin|ADC2_IN6_Pin|ADC2_IN7_Pin|ADC2_IN8_Type_Pin);


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(ADC2, &ADC_InitStruct);
      
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_CONTINUOUS;
ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_PRESERVED;
LL_ADC_REG_Init(ADC2, &ADC_REG_InitStruct);
      
LL_ADC_DisableIT_EOC(ADC2);
LL_ADC_DisableIT_EOS(ADC2);
LL_ADC_DisableDeepPowerDown(ADC2);
LL_ADC_EnableInternalRegulator(ADC2);
ADC_CommonInitStruct.CommonClock = LL_ADC_CLOCK_ASYNC_DIV10;
ADC_CommonInitStruct.Multimode = LL_ADC_MULTI_INDEPENDENT;
LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC2), &ADC_CommonInitStruct);
LL_ADC_REG_SetTriggerEdge(ADC2, LL_ADC_REG_TRIG_EXT_RISING);
/** Configure Regular Channel
*/      

      
      LL_ADC_REG_SetSequencerRanks(ADC2, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_7);
LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_7, LL_ADC_SAMPLINGTIME_47CYCLES_5);
LL_ADC_SetChannelSingleDiff(ADC2, LL_ADC_CHANNEL_7, LL_ADC_SINGLE_ENDED);
      

}


void Start_ADC(void)
         {
      __IO uint32_t wait_loop_index = 0;

if (LL_ADC_IsEnabled(ADC2) == 0)
{

    wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US * (SystemCoreClock / (100000 * 2))) / 10);
    while(wait_loop_index != 0)
    {
      wait_loop_index--;
    }
    /* Run ADC self calibration */
    LL_ADC_StartCalibration(ADC2, LL_ADC_SINGLE_ENDED);
    /* Poll for ADC effectively calibrated */
    #if (USE_TIMEOUT == 1)
    Timeout = ADC_CALIBRATION_TIMEOUT_MS;
    #endif /* USE_TIMEOUT */

    while (LL_ADC_IsCalibrationOnGoing(ADC2) != 0)
    {

    }

    wait_loop_index = (ADC_DELAY_CALIB_ENABLE_CPU_CYCLES >> 1);
    while(wait_loop_index != 0)
    {
      wait_loop_index--;
    }

    /* Enable ADC */
    LL_ADC_Enable(ADC2);
    while(LL_ADC_IsActiveFlag_ADRDY(ADC2) == 0)
    {

    }
      //LL_ADC_REG_SetDMATransfer(ADC2,LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
    LL_ADC_REG_StartConversion(ADC2);

}




问题解决:默认生成的代码加了外部触发,屏蔽就好了。//LL_ADC_REG_SetTriggerEdge(ADC1, LL_ADC_REG_TRIG_EXT_RISING);

发表于 2020-9-10 09:00:15

楼主检查一下LL_GPIO_EnablePinAnalogControl这个函数的使用。

虚空藏戒子 发表于 2020-9-10 14:18:00

安 发表于 2020-9-10 09:00
楼主检查一下LL_GPIO_EnablePinAnalogControl这个函数的使用。
这个函数使用没问题,但我想看下ADC脚的模拟开关是否打开,但仿真状态下不显示GPIO->ASCR寄存器可供查看???(我在1楼更新了一张截图)

发表于 2020-9-10 14:29:07

仿真模式下可以查看,需要暂停一下,再看内容
页: [1]
查看完整版本: stm32l475 ADC采集失效问题求助( 问题已解决)