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

STM32F205利用DMA实现多通道ADC采样,但是每启动一次转换才能更新一次结果,为什么。

[复制链接]
phyllischen12 提问时间:2022-7-11 17:49 / 未解决
1、ADC配置采样12个规则通道,采用单次、扫描模式,允许DMA,配置每次转换结束都有DMA requests;
2、DMA配置的外设和内存长度都是16位,circular mode,direct mode;
3、软件SWSTART启动AD转换后,每启动一次内存中只有一次转换结果更新,要完成12次采样需要SWSTART启动12次,为什么?单次扫描不是应该启动一次就自动扫描完成12次采样,把12次结果依次存入内存吗?是我理解不对吗?求指导
收藏 评论12 发布时间:2022-7-11 17:49

举报

12个回答
wenyangzeng 回答时间:2022-7-11 19:59:24
ADC需要配置连续扫描模式
一个脑子不够用 回答时间:2022-7-12 07:03:21
.............
yklstudent 回答时间:2022-7-12 08:33:28
mark,签到+1
废鱼 回答时间:2022-7-12 08:37:12
要选择连续采集模式,DMA可以控制采集长度,比如采集12次,就写入12个数据长度即可。当采集够12次后,他会自动产生完成中断状态。
butterflyspring 回答时间:2022-7-12 11:03:05
楼主检查一下memory的部分有没有设置 地址增加模式,否则有可能就一个地址不停的写数据,只有一次结果。
butterflyspring 回答时间:2022-7-12 11:03:09
楼主检查一下memory的部分有没有设置 地址增加模式,否则有可能就一个地址不停的写数据,只有一次结果。
phyllischen12 回答时间:2022-7-12 14:45:08
谢谢大家的回复;1、memory的地址设置了递增模式;
2、ADC配置改为连续、扫描模式后,启动ADC后memory里能够得到转换的12通道结果;然后需要重置ADC1->CR2里的DMA位->0->1,就能得到更新的12次新的转换结果(发现只有不停重置DMA位才能不停更新memory);
3、但是有一个新的疑问:ADC连续模式的话,也就是说,在第一次转换完12通道,还没有重置ADC1->CR2里的DMA位之前,实际上ADC也在不停的转换,ADC的data寄存器是在不停刷新结果的,只是没有更新到memory里,那么后面会不会导致memory里存放的结果的顺序错乱,比如第一次启动ADC,memory[0]里存放的是ADC第一通道的结果,然后ADC在连续转换,再然后重置DMA位,得到第二次采样转换结果,这个时候ADC可能在转换第二通道的结果,那么memory[0]里存放的就可能是第二通道的结果,毕竟因为ADC一直在工作,不确定重置DMA位与ADC转换的时序一定正确?
phyllischen12 回答时间:2022-7-12 15:04:50
补充一下之前的疑惑(前面可能没描述清楚):在第一轮转换12通道的过程中,12次转换依次更新memory,假设memory[0]里存放的是第一通道的采样转换结果 ;12通道结束后进入中断处理(但是同时ADC连续模式会继续转换进入第二轮采样转换),重置ADC1->CR2里的DMA位,然后ADC的转换结果再依次存入memory,但是此时并不确定ADC正在转换第几通道,那么memory[0]里存放的新结果就可能不是第一通道的结果,而是其他通道结果,毕竟因为ADC一直在工作,不确定重置DMA位一定在第一通道转换结束前?(不知道我这个疑惑对不对)

phyllischen12 回答时间:2022-7-13 10:21:27
butterflyspring 发表于 2022-7-12 11:03
楼主检查一下memory的部分有没有设置 地址增加模式,否则有可能就一个地址不停的写数据,只有一次结果。
...

memory的地址设置了递增模式;
phyllischen12 回答时间:2022-7-13 10:22:01
废鱼 发表于 2022-7-12 08:37
要选择连续采集模式,DMA可以控制采集长度,比如采集12次,就写入12个数据长度即可。当采集够12次后,他会 ...

2、ADC配置改为连续、扫描模式后,启动ADC后memory里能够得到转换的12通道结果;然后需要重置ADC1->CR2里的DMA位->0->1,就能得到更新的12次新的转换结果(发现只有不停重置DMA位才能不停更新memory);
3、但是有一个新的疑问:ADC连续模式的话,也就是说,在第一次转换完12通道,还没有重置ADC1->CR2里的DMA位之前,实际上ADC也在不停的转换,ADC的data寄存器是在不停刷新结果的,只是没有更新到memory里,那么后面会不会导致memory里存放的结果的顺序错乱,比如第一次启动ADC,memory[0]里存放的是ADC第一通道的结果,然后ADC在连续转换,再然后重置DMA位,得到第二次采样转换结果,这个时候ADC可能在转换第二通道的结果,那么memory[0]里存放的就可能是第二通道的结果,毕竟因为ADC一直在工作,不确定重置DMA位与ADC转换的时序一定正确?
phyllischen12 回答时间:2022-7-13 10:24:10
wenyangzeng 发表于 2022-7-11 19:59
ADC需要配置连续扫描模式

但是我看文档上说单次扫描就是启动一次就能扫描ADC1->SQR1里配置的通道数量啊?我理解不对吗?
phyllischen12 回答时间:2022-7-13 11:49:51
已解决
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版