ZHAOBAO511 发表于 2024-1-4 15:39:21

STM32L431的ADC连续转换无用?CUBEMAX设置的。

本帖最后由 ZHAOBAO511 于 2024-1-4 15:40 编辑

如题:设置为ADC连续转换,结果还是要手动停止才可以。void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};

/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
    Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_8;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
    Error_Handler();
}

}






每一次都要停止:
HAL_ADC_Start(&hadc1);
      HAL_ADC_PollForConversion(&hadc1,0x02);   //等待转换完成
                                HAL_ADC_Stop(&hadc1); 如果不停止下次转换就没数据。

keshipt 发表于 2024-1-4 15:53:08

hadc1.Init.DMAContinuousRequests = DISABLE;改为ENABLE

ZHAOBAO511 发表于 2024-1-4 16:08:32

keshipt 发表于 2024-1-4 15:53
hadc1.Init.DMAContinuousRequests = DISABLE;改为ENABLE
(引用自2楼)

谢谢,单独改这个还是没用,不过我可以用DMA试试,我看了别人的程序,完全不需要启动DMA就可以。
页: [1]
查看完整版本: STM32L431的ADC连续转换无用?CUBEMAX设置的。