feiante 发表于 2015-2-2 19:47:23

有没有人用stm32cube的HAL 库做过多路ADC的DMA采样试验

本帖最后由 feiante 于 2015-2-3 09:49 编辑

有没有人用stm32cube的HAL 库做过多路ADC的DMA采样试验,今天打算试试3路ADC的DMA采样,使用PA0,PA1,PA2这3个脚,感觉有问题,只能PA0采样到,PA1,PA2不能采样,除了3V就是4095.官方自带的例程只有1个通道的。原来F0的是成功的,使用了2路。谁做过F4的并成功的,参考一下配置

feiante 发表于 2015-2-3 10:44:05

感觉只有PA0能采集到

linshifaa 发表于 2015-2-3 13:49:13

。。。。。。。

feiante 发表于 2015-2-3 15:01:56

linshifaa 发表于 2015-2-3 13:49
。。。。。。。

“。。。。。。。”是什么意思呢?不懂

dsjsjf 发表于 2018-3-20 10:16:28

#define AdcFilterNum    80
#define AdcChannelNum   3
#define AdcDmaLengh   (AdcFilterNum * AdcChannelNum)

uint32_t ADC_ConvertedValue;

/* ADC1 init function */
static void MX_ADC1_Init(void)
{

ADC_ChannelConfTypeDef sConfig;
ADC_InjectionConfTypeDef sConfigInjected;

    /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
    */
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 3;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
    _Error_Handler(__FILE__, __LINE__);
}

    /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
    */
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
    _Error_Handler(__FILE__, __LINE__);
}

    /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
    */
sConfig.Channel = ADC_CHANNEL_15;
sConfig.Rank = 2;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
    _Error_Handler(__FILE__, __LINE__);
}

    /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
    */
sConfig.Channel = ADC_CHANNEL_VREFINT;
sConfig.Rank = 3;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
    _Error_Handler(__FILE__, __LINE__);
}
}

/******************************************************************************************************
*        函 数 名: Start_AdConvert
*        功能说明: 启动AD转换
*                      采用DMA连续转换模式(多通道扫描)
*        形    参:无
*        返 回 值: 无
********************************************************************************************************/
void Start_AdConvert(void)
{
HAL_ADC_Start_DMA(&hadc1, (ADC_ConvertedValue), AdcDmaLengh);
}

开启转换后直接从ADC_ConvertedValue数组中取值

absdjko 发表于 2018-11-12 17:26:12

dsjsjf 发表于 2018-3-20 10:16
#define AdcFilterNum    80
#define AdcChannelNum   3
#define AdcDmaLengh   (AdcFilterNum * AdcChan ...

DMA方式不是直接写数组里了吗?对HAL_ADC_STAR_DMA不太理解

dsjsjf 发表于 2018-11-13 14:35:30

absdjko 发表于 2018-11-12 17:26
DMA方式不是直接写数组里了吗?对HAL_ADC_STAR_DMA不太理解

这相当于一个启动命令
页: [1]
查看完整版本: 有没有人用stm32cube的HAL 库做过多路ADC的DMA采样试验