找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4029|回复: 2
打印 上一主题 下一主题
收起左侧

STM32 DAC_DMA_1K正弦波DAC输出波形源码

[复制链接]
跳转到指定楼层
楼主
ID:408023 发表于 2018-10-11 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过dma传输输出1k正弦波

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "math.h"         
  8. #include "dma.h"
  9. #include "dac.h"
  10. #include "timer.h"



  11. #define DAC_SIN_SIZE    100         //发送数据长度,最好等于sizeof(TEXT_TO_SEND)+2的整数倍.

  12. u16 DAC_SIN_BUF[DAC_SIN_SIZE];  //发送数据缓冲区

  13. #define PI 3.1415962

  14. //产生正弦波函序列,根据DAC_SIN_SIZE生成。
  15. void dac_creat_sin_buf(void)
  16. {
  17.     u8 i;
  18.     float inc=2*PI/DAC_SIN_SIZE;        //计算增量(一个周期DAC_SIN_BUF个点)
  19.     float outdata=0;
  20.     for(i=0;i<DAC_SIN_SIZE;i++)
  21.     {
  22.         outdata=2047*(1+sin(inc*i));    //计算以dots个点为周期的每个点的值,放大2048倍,并偏移到正数区域。
  23.         printf("%f\r\n",outdata);
  24.         DAC_SIN_BUF[i]=outdata;
  25.     }  
  26. }

  27. int main(void)
  28. {         
  29.     u8 i=0;
  30.     delay_init();                     //延时函数初始化         
  31.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  32.     uart_init(115200);                 //串口初始化为115200
  33.         LED_Init();                                  //初始化与LED连接的硬件接口
  34.         LCD_Init();                                   //初始化LCD         
  35.         KEY_Init();                                //按键初始化        
  36.      
  37.     TIM3_Int_Init(9,71);
  38.     dac_creat_sin_buf();
  39.     Dac1_Init();
  40.          DAC_DMA_Config(DMA1_Channel3,(u32)&DAC->DHR12R1,(u32)DAC_SIN_BUF,DAC_SIN_SIZE);//DMA1通道4,外设为串口1,存储器为SendBuff,长度SEND_BUF_SIZE.
  41.          TIM3->DIER|=1<<8;
  42.     MYDMA_Enable(DMA1_Channel3);
  43.      
  44.     POINT_COLOR=RED;//设置字体为红色
  45.         LCD_ShowString(30,50,200,16,16,"WarShip STM32");        
  46.         LCD_ShowString(30,70,200,16,16,"DMA TEST");        
  47.         LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
  48.         LCD_ShowString(30,110,200,16,16,"2015/1/15");        
  49.          LCD_ShowString(30,130,200,16,16,"KEY0:Start");
  50.                           
  51.         POINT_COLOR=BLUE;//设置字体为蓝色         
  52.          while(1)
  53.         {   
  54.                 i++;
  55.                 delay_ms(10);
  56.                 if(i==20)
  57.                 {
  58.                         LED0=!LED0;//提示系统正在运行        
  59.                         i=0;
  60.                 }                  
  61.         }
  62. }
复制代码

所有资料51hei提供下载:
实验22 DMA实验-1K正弦波DAC输出.rar (366.44 KB, 下载次数: 103)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:270005 发表于 2019-8-7 14:38 | 只看该作者
好东西,谢谢!
回复

使用道具 举报

板凳
ID:270005 发表于 2019-8-7 14:38 | 只看该作者
实验22 DMA实验-1K正弦波DAC输出.rar
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表