打印

求解----依然ADC 依然DMA 依然错位~~

[复制链接]
1785|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuyjgh|  楼主 | 2011-8-15 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhuyjgh 于 2011-8-15 10:34 编辑

不知道能不能说清楚~~

程序思路是这样,,我要采集四路模拟量,通道10、通道11、通道12、通道13,使用规则组16个,独立模式(DULMOD=0)、连续扫描方式(SCAN=1 CONT=1),但是采样顺序和次数需要交替改变。第一次(后称状态1)顺序为 通道10 12 13 13 13 13 13 13 11 11 11 11 11 11 10 12 第二次(后称状态2)顺序为 通道13 11 12 12 12 12 12 12 10 10 10 10 10 10 13 11  第三次重复第一次,然后依次交替。
使用DMA接收数据,建立一个二维数组,abc[2][1024]  分别接收状态1和状态2的数据。采用DMA中断 DMA数据量设为1024(16*64 ),想要的是规则组扫描64遍,DMA中断并重新配置规则组顺序,在扫描状态2 64遍,依次循环。
结果是状态2的数据出现错位,比较菜,有几点不解,需要大家帮忙~~

1:ADC应该怎么停止?     如果配置了连续扫描,我想让他立即停止可以吗,EXTRIG SWSTART SCAN CONT 这几个位应该怎么处理,如果在DMA来的时候将这几位全部清掉ADC会停止吗?如果停止了,下次再用SWSTART开启的时候,会从规则通组第一个开始转换码?还是在上次停掉的地方接着转换?
2:ADC校准的问题,STM32说在上电的时候最好校准一次ADC,是在芯片上电呢还是ADON置1的时候呢?如果是在ADON置1的时候,那在程序中如果清了ADON再置1的话不是都要校准啊~~
3:DMA的问题,DMA会占用系统总线,如果我频繁(一直在用)的使用DMA会不会影响程序的速度啊??会不会影响实时性啊?

暂时这么多,劳烦您看完了,,谢谢,希望知道的能给指点一二~~
沙发
香水城| | 2011-8-15 10:46 | 只看该作者
1)清除SCAN即可停止连续扫描。如果停止了,下次再用SWSTART开启的时候,一般不会从通道的第一个开始转换。

2)芯片上电时校验。

3)DMA会占用系统总线,频繁(的使用DMA会影响程序的速度;是否会影响实时性,则要看你整个系统的负荷怎样。

使用特权

评论回复
板凳
zhuyjgh|  楼主 | 2011-8-15 10:51 | 只看该作者
2# 香水城

哦,,谢谢斑竹回复,,另外再问一下~~
关于第一个问题,,那我有办法让他停止扫描后,再启动的时候从规则组第一个开始转换吗??

使用特权

评论回复
地板
香水城| | 2011-8-15 10:57 | 只看该作者
2# 香水城  

哦,,谢谢斑竹回复,,另外再问一下~~
关于第一个问题,,那我有办法让他停止扫描后,再启动的时候从规则组第一个开始转换吗??
zhuyjgh 发表于 2011-8-15 10:51


一般很难控制,停止扫描一定要在规则组最后一个转换结束,并且第一个转换开始之前,这个停止的时机很难把握。所以建议再启动之前,关闭并从新初始化ADC。

使用特权

评论回复
5
zhuyjgh|  楼主 | 2011-8-15 11:02 | 只看该作者
哦,,明白了,,谢谢斑竹~~
总工建议我DMA数据量设成16,然后把CONT清掉不使用连续模式,这样保证ADC和DMA每次对齐。我担心万一错了一次,就永远等不到DMA中断了,,还是重新初始化ADC保险点~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

335

帖子

0

粉丝