单片机/MCU论坛
直播中

凌流浪

8年用户 1024经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

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

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

回帖(1)

康瑜玲

2023-10-18 15:33:46
 不是,可以不用。用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=HAL_ADC_GetValue( hadc1);printf("------ch:%d--%d-------rn"iadcBuf);}HAL_ADC_Stop( hadc1);HAL_Delay(1000);


调用hal库接口函数也需要注意,HAL_ADC_Start一定要放在for里面,即每一个通道都要触发。四个通道都采集完了,再去调用HAL_ADC_Stop( hadc1);结束本次ADC采集。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分