最近学习用DAC输出正弦波,看到3.0库里面有个例程,看完之后有一些问题:
1,就是正弦波的表格它是怎样弄出来的呢?表格中元素数量的多少对波形的有哪些影响呢?越多精度越高?
2.为什么它里面需要这样呢?
for (Idx= 0; Idx<32; Idx++)
{
DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
}
是不是高位与低位是对应正弦波的上下两个部分呢?
3.TIM8的更新时间和DMA的DMA_InitStructure.DMA_BufferSize = 16;
这两个变量对输出的波形的频率是怎样的影响呢?是不是有一条公式可以计算出波形的频率呢?
小弟最近遇到上述这些问题,希望原子哥和各位前辈给小弟指点一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
关于第二个问题,我说说我的理解。
这个程序的运行结果应该是PA4和PA5都能输出一样的正弦波,也就是两路是同时输出的,那使用的应该就是DAC_DHR12RD寄存器,使用DMA传输的话,就只需使用一个DMA通道,因为DAC_DHR12RD寄存器(32位)的[27:16]位存放的是DAC通道2的输出数据(12位),[11:0]位存放的是DAC通道1的输出数据(12位),所以给这一个寄存器赋值就能输出两路波形。而Sine12bit[]是12位的正弦波数据,要输出两路正弦波,就得在[27:16]位和[11:0]位都写入正弦波数据。DualSine12bit[Idx] 是32位的,最终是通过DMA传入DAC_DHR12RD寄存器的,所以需要在DualSine12bit[Idx]的[27:16]位和[11:0]位写入12位的正弦数据。
DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);中Sine12bit[Idx] << 16是左移16位的意思,然后再加上Sine12bit[Idx],就给两路通道都写入值了,内容是一样的,并不是正弦
的上下两个部分。
一周热门 更多>