关于STM32做信号发生器求助大神

2019-07-20 08:34发布

工作需要,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,代码全部上传上来
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
正点原子
1楼-- · 2019-07-20 10:56
DMA可以设置地址自增,所以你无需频繁自己设置DMA的源地址。只需要设置源地址自增即可。
sharon
2楼-- · 2019-07-20 15:57
自己顶,求原子哥关注
sharon
3楼-- · 2019-07-20 18:14
 精彩回答 2  元偷偷看……
xuande
4楼-- · 2019-07-20 23:26
回复【4楼】sharon:
---------------------------------

没用过库函数,不知道 BufferSize 究竟指什么。

但是,可以肯定的是,无论源头还是目的地,只需要设置起始地址和每个点的增量。这里比较难,要理解、摸索一下;
再设置总点数 NDTR ,启动,就可以了。

每个点都设置一次,肯定不需要的,否则 DMA 还有什么意义?!
在执行完成以后,重新设置某些参数,就可以了。
yzl
5楼-- · 2019-07-21 02:42
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-07-21 08:26
 精彩回答 2  元偷偷看……

一周热门 更多>