您的位置:首页 > 其它

STM32 使用DMA+DAC+TIMER输出正弦波

2018-03-08 09:57 417 查看
来自博客:http://www.cnblogs.com/zhoubatuo/p/6123217.html
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾:DMA:我的理解就是一个通道,或者是一座桥梁。在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道。建立这个通道的好处是:可以抛开CPU,不占用CPU的资源,直接使用这块内存的内容,速度也会加快。DAC:STM32F103中有两个DAC,可以同时使用。DAC的作用就是将数字量转化为模拟量(电压),在这就不作太多的讲解。TIMER:定时器。不作讲解。那么对于使用DMA+DAC+TIMER产生正弦波的原理或过程,我有这样一个简单的理解:  先将一个可以生成正弦波的数据表保存在静态内存中,然后在DAC以及这块内存中间使用DMA建立一个通道,经过以上步骤之后,DAC模块就可以通过DAM通道拿取静态内存中可以生成正弦波的数据,拿取数据,然后经过数模准换,在引脚进行输出就可以得到正弦波了。那么当然,这个速度是非常快的,如果没有一定的延时,那么得到的估计就是一个变化很快的模拟量。所以这个时候就需要使用定时器TIMER了。DAC在初始化的时候,可以设置成使用定时器触发,这就意味着,当定时器溢满的时候,就会触发DAC工作。这样一来,就可以通过改变定时器的定时时间来改变正弦波的周期了。以上是我的一个简单的了解,应该会有很多不严谨不正确的地方,毕竟是一个新手菜鸟,以上见解也是方便自己学习,本人也会根据不断学习进行补充营养的。下面贴出一个例子进行分析:1、初始化波形表以及输出的引脚
 2、初始化DAC
  3、定时器配置
 4、DMA配置 
     DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1;//外设地址为DAC通道1的地址
     DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SineWave_Value;//波形数据表内存地址     DMA_Init(DMA2_Channel3, &DMA_InitStructure);//初始化
     DMA_Cmd(DMA2_Channel3, ENABLE); //使能DMA通道3                } 5、正弦波初始化 
  经过以上的简单配置,就可以使得32板输出sin波形了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: