• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

多通道AD采集模拟量的时候是不是只能用dma模式?

c12425cf902c3edb 2019-09-27 浏览量:988
多通道AD采集模拟量的时候是不是只能用dma模式?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:1
  • 不是,可以不用。用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采集。

相关问题

问题达人换一批

多通道AD采集模拟量的时候是不是只能用dma模式?