工作需要,4月份开始接触STM32,之前一直都是做FPGA,51这些
现在做一个信号发生器,有一些疑问, 也看了论坛的一些帖子,觉得不太靠谱
而我现在做的是一个要推向市场的产品
大致构思就是通过DA描点的方式,DA的数据来源是DMA
输出波形的周期可以通过Timer来控制,DMA由timer更新来触发
假设输出正弦波,频率1k,如果一个周期描100个点,APB1是36M的话,Timer为72M,Timer计数值设为72000000/1000/100
Timer每次更新触发一次DMA,DMA传数据到DA描一个点
波形一个周期分为100个点,这100个点的值我放在一个数组比如data[]里
描第一点是data[0],我们可以设为 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&data;
然后描第二个点时需要data[1]
难道我需要开timer中断,把DMA_InitStructure.DMA_MemoryBaseAddr改到data[1]
这样会不会太麻烦?
各位大神,你们的信号发生器都是什么思路?
望赐教
做完这个项目后,我会把sch,pcb,代码全部上传上来
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
谢谢原子哥指点
我的信号发生器代码已经大致出来了,目前还有点问题就是低频或高频时波形会严重失真
1K-5K区间波形非常好
打算再修改一下,然后运放电路也要改动
感觉DAC的数据寄存器有数据缓冲功能?类似一个无限长度的FIFO?
DMA应该是很快的把整个波形周期的点数数值都一股脑传给了DAC寄存器
然后DAC却可以一个一个地慢慢转换!
这是之前一直想不通的问题所在,一直想匹配DMA和DAC的时钟,导致耽误了很久
再次感谢原子哥
一周热门 更多>