打印

stm32 DAC波形输出用到的数组问题。

[复制链接]
4328|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linc676085|  楼主 | 2012-12-28 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 linc676085 于 2012-12-28 21:30 编辑

不知道各位大侠又没有注意到以下这种情况
当我在做利用DMA从DAC引脚输出波形的程序时候,在程序头部定义了两个数组:
u16 Sine12bit[7] = {0,1861,2480,3723,2480,1861,0};
u32 DualSine12bit[7];
在程序中通过for循环将sine12bit数组内的数据赋值给
DualSine12bit数组,然后通过DMADualSine12bit数组为源地址,在DAC上输出的波形是近似于正弦函数的漂亮波形。但是,如果我用DMA直接Sine12bit数组为源DAC上输出的波形在周期结束的时候出现了拖拉变样。这到底是为什么呢?是什么原因?
在论坛和百度上查过相应关键字,没有找到相应的解释所以大胆发个帖子问问各位大神,指点下迷津,探讨探讨。

沙发
linc676085|  楼主 | 2012-12-28 21:28 | 只看该作者
:loveliness:自己顶个。

使用特权

评论回复
板凳
linc676085|  楼主 | 2012-12-29 12:01 | 只看该作者
自己再顶个。

使用特权

评论回复
地板
uet_cache| | 2012-12-29 12:05 | 只看该作者
你的拖拉是什么意思,是什么形状。另外,你可以帖出你的DMA初始程序。两个数组区别仅在数据长度,应该跟你的DMA初始中源数据格式有关。。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
linc676085 + 2 很给力!
5
airwill| | 2012-12-29 12:08 | 只看该作者
数据量也是一致的.
会不会是设置问题, 比如数据宽度.

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
linc676085 + 2 很给力!
6
linc676085|  楼主 | 2012-12-29 16:07 | 只看该作者
uet_cache 发表于 2012-12-29 12:05
你的拖拉是什么意思,是什么形状。另外,你可以帖出你的DMA初始程序。两个数组区别仅在数据长度,应该跟你 ...

下午抽空验证了下四楼、五楼的猜想,经过验证,与四楼、五楼的猜想一致确实跟DMA初始化中的源数组定义的宽度有关,原数组定义多少位宽度,那么DMA在定义传输数据宽度的时候也应该与其相符合,否则输出的波形就会有变样。感谢四楼、五楼。

使用特权

评论回复
7
linc676085|  楼主 | 2012-12-29 16:09 | 只看该作者
大家在做DAC输出的时候一定要注意,这点哦。

使用特权

评论回复
8
caojiao| | 2013-1-3 11:13 | 只看该作者

使用特权

评论回复
9
小明去| | 2014-8-12 23:35 | 只看该作者
airwill 发表于 2012-12-29 12:08
数据量也是一致的.
会不会是设置问题, 比如数据宽度.

我在写AD/DA的,AD采集信号源的幅值,存放在数组ADC_ConvertedValueLocal[]中,然后赋给DualSine12bit[]让DA输出,在示波器上显示没有波形,但DualSine12bit[]里面确实有数据,这个地址是DA的DMA的存储地址。帖子过去较久,希望得到回复,谢谢!

使用特权

评论回复
10
洁月明| | 2016-10-28 09:44 | 只看该作者
看楼主几年前就玩过dac波形输出了,想请教一下
  int dat;
int const DAC_results1[]={475        ,
for(j=0;j<2795;j++)
        {
            dat=DAC_results1[j];
            dat &=0xFFF;
            DAC12_1DAT=dat;
            __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0
        }

因为我的DAC是12位的所以用变量做了一下处理,可是输出还是不对,查过资料没结果,看与楼主之前的问题有点像,楼主有时间指点一下吗?

使用特权

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

本版积分规则

1

主题

42

帖子

1

粉丝