qazplm3218 发表于 2019-10-24 17:27:16

STM32F103 ADC多通道检测必须要DMA吗?

STM32F103 ADC1的2个通道检测,不通过DMA
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);                               
        while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));       
        ad1=ADC_GetConversionValue(ADC1);
        ad1=(ad1*3300)>>12;
        systick_delay_ms(100);

        ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_239Cycles5);
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);                               
        while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));       
        ad2=ADC_GetConversionValue(ADC1);
        ad2=(ad2*3300)>>12;
        systick_delay_ms(100);


想要的结果是ad1存放通道1的数据,ad2存放通道2的数据
实际运行:ad2里一下是通道1的数据,一下是通道2的数据??正确的程序应该怎么写?必须通过DMA来获取吗??

radio2radio 发表于 2019-10-24 17:38:48

不一定,好用就好。

wenyangzeng 发表于 2019-10-24 17:41:46

1、ADC不一定非得使用DMA;
2、2个ADC转换使用扫描模式即可;
3、楼主的代码貌似ADC初始化的一部分,其中转换数据的处理放初始化里没有意义,这个初始化函数只会执行一次。数据的处理应该放在在读取ADC转换值的函数中进行处理。
扫描方式ADC ST官方有代码可参考

qazplm3218 发表于 2019-10-24 18:52:26

wenyangzeng 发表于 2019-10-24 17:41
1、ADC不一定非得使用DAM;
2、2个ADC转换使用扫描模式即可;
3、楼主的代码貌似ADC初始化的一部分,其中转 ...

我参考下,谢谢您

dataozi 发表于 2019-10-24 18:56:53

不一定使用DMA 可以规则扫描 两个通道 也可以每个通道单独扫描

932837498@qq.co 发表于 2019-10-25 09:57:32

不一定啊,DMA只是方便更快的把数据存储传输

butterflyspring 发表于 2019-10-30 16:55:54

条条大路通罗马,只要符合应用需求就行。芯片可以满足查询转换方式,相比DMA传输方式,稍微占点资源而已。速度满足应用需要就可以了:) 另外代码中没看到转换模式的配置。如果手动改通道,要等到当前转换结束后,使ADC停止转换再手动切换通道
页: [1]
查看完整版本: STM32F103 ADC多通道检测必须要DMA吗?