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

[复制链接]
 楼主| 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 很给力!

查看全部评分

airwill 发表于 2012-12-29 12:08 | 显示全部楼层
数据量也是一致的.
会不会是设置问题, 比如数据宽度.

评分

参与人数 1威望 +2 收起 理由
linc676085 + 2 很给力!

查看全部评分

 楼主| linc676085 发表于 2012-12-29 16:07 | 显示全部楼层
uet_cache 发表于 2012-12-29 12:05
你的拖拉是什么意思,是什么形状。另外,你可以帖出你的DMA初始程序。两个数组区别仅在数据长度,应该跟你 ...

下午抽空验证了下四楼、五楼的猜想,经过验证,与四楼、五楼的猜想一致确实跟DMA初始化中的源数组定义的宽度有关,原数组定义多少位宽度,那么DMA在定义传输数据宽度的时候也应该与其相符合,否则输出的波形就会有变样。感谢四楼、五楼。
 楼主| linc676085 发表于 2012-12-29 16:09 | 显示全部楼层
大家在做DAC输出的时候一定要注意,这点哦。
caojiao 发表于 2013-1-3 11:13 | 显示全部楼层
小明去 发表于 2014-8-12 23:35 | 显示全部楼层
airwill 发表于 2012-12-29 12:08
数据量也是一致的.
会不会是设置问题, 比如数据宽度.

我在写AD/DA的,AD采集信号源的幅值,存放在数组ADC_ConvertedValueLocal[]中,然后赋给DualSine12bit[]让DA输出,在示波器上显示没有波形,但DualSine12bit[]里面确实有数据,这个地址是DA的DMA的存储地址。帖子过去较久,希望得到回复,谢谢!
洁月明 发表于 2016-10-28 09:44 | 显示全部楼层
看楼主几年前就玩过dac波形输出了,想请教一下
  1.   int dat;
  2. int const DAC_results1[]={475        ,
  3. for(j=0;j<2795;j++)
  4.         {
  5.             dat=DAC_results1[j];
  6.             dat &=0xFFF;
  7.             DAC12_1DAT=dat;
  8.             __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0
  9.         }

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

本版积分规则

1

主题

42

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部