你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
qazplm3218 提问时间:2019-10-24 17:27 /
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来获取吗??
收藏 1 评论8 发布时间:2019-10-24 17:27

举报

8个回答
butterflyspring 回答时间:2019-10-30 16:55:54
条条大路通罗马,只要符合应用需求就行。芯片可以满足查询转换方式,相比DMA传输方式,稍微占点资源而已。速度满足应用需要就可以了 另外代码中没看到转换模式的配置。如果手动改通道,要等到当前转换结束后,使ADC停止转换再手动切换通道

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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官方有代码可参考
ScanADC.rar (324.33 KB, 下载次数: 28)

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

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

我参考下,谢谢您
大陶 回答时间:2019-10-24 18:56:53
不一定使用DMA 可以规则扫描 两个通道 也可以每个通道单独扫描
橡皮筋儿 回答时间:2019-10-25 09:57:32
提示: 作者被禁止或删除 内容自动屏蔽
romter 回答时间:2024-1-30 16:44:54

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

是不是 只能scan4個,, 我需要6個 改不到合適的地方 能否 指導下

romter 回答时间:2024-1-30 16:46:07

現在 可否 超過6個通道??

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版