不是,可以不用。用DMA的就不说了,你应该已经会了,如果多通道不用DMA,首先需要打开扫描模式,然后区分STM32的单次模式与连续模式,单次模式并不是指一个通道,假如你同时打开了四个通道,单词模式时会把这四个通道采集一遍就停止采集,而连续模式就是这四个通道采集一遍一直又接着从第一个开始采集。如果要使用非DMA和中断模式,参考这个配置:扫描模式+单词转换模式+间断模式。
扫描模式时配置多通道时必须打开的;单词转换的意思是不需要不停的去采集每个通道,而是采集完一遍之后就停止;间断模式可以让扫描的四个通道分为四个组,如果你使用了CUBEMX,就是Number of Conversion这个选项,如果我没记错的话,你使用非DMA模式,这里的Number of Conversion这个选项需要配置为1,否则读取AD值时只能读取最后一个通道。
具体使用HAL库的代码如下:
for(i=1;i<5;i++)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc10xffff);
adcBuf[i]=HAL_ADC_GetValue(&hadc1);
printf("------ch:%d--%d-------\r\n"iadcBuf[i]);
}
HAL_ADC_Stop(&hadc1);
HAL_Delay(1000);
调用hal库接口函数也需要注意,HAL_ADC_Start一定要放在for里面,即每一个通道都要触发。四个通道都采集完了,再去调用HAL_ADC_Stop(&hadc1);结束本次ADC采集。