找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AD9850模块STM32程序 输出频率可调的正弦波

[复制链接]
跳转到指定楼层
楼主
ID:377919 发表于 2019-8-17 09:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前些天由于某种原因,收集了点AD9850的资料
附上自己写的AD9850的程序,供大家参考,输出的是频率可调的正弦波

单片机源程序如下:
  1. /********************************************
  2. *********************************************/

  3. #include "DA9850.h"

  4. /******************************************
  5.     @函数:void GPIO_Configuration(void)
  6.     @功能:AD9850对应管脚的初始化
  7.         @返回值:无
  8.         @参数:无
  9.         @备注: 这里不需要更改

  10. *******************************************/
  11. void GPIO_Configuration(void)
  12. {
  13.      GPIO_InitTypeDef   GPIO_InitStructure;
  14.           DA9850_GPIO_PeriphClkCmd( DA9850_GPIO_CLK ,ENABLE);
  15.          
  16.          GPIO_InitStructure.GPIO_Pin =FQUD_GPIO_Pin |Data_GPIO_Pin |WCLK_GPIO_Pin |RESET_GPIO_Pin ;
  17.          GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  18.          GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;
  19.      GPIO_Init(DA9850_GPIO_PORT ,&GPIO_InitStructure);
  20.         
  21. }



  22. /********************************************
  23.      @函数:void RCC_Configuration(void)
  24.      @功能:RCC初始化
  25.      @返回值:无
  26.      @参数:无
  27.      @备注:这个函数可以注释掉,频率震荡会增加
  28. *********************************************/
  29. void RCC_Configuration(void)
  30. {
  31.           ErrorStatus HSEStartUpStatus;  
  32.         RCC_DeInit();                           
  33.         RCC_HSEConfig(RCC_HSE_ON);
  34.         HSEStartUpStatus=RCC_WaitForHSEStartUp();
  35.         if(HSEStartUpStatus==SUCCESS)
  36.         {
  37.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  38.         FLASH_SetLatency(FLASH_Latency_2);
  39.         
  40.         RCC_HCLKConfig(RCC_SYSCLK_Div1);
  41.         RCC_PCLK1Config(RCC_HCLK_Div2);
  42.         RCC_PCLK2Config(RCC_HCLK_Div1);
  43.         
  44.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);        
  45.         RCC_PLLCmd(ENABLE);
  46.         
  47.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
  48.         {}
  49.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  50.         while(RCC_GetSYSCLKSource()!=0x08)
  51.         {}
  52.         }

  53. }

  54. /*********************************************
  55.       @函数:void AD9850_Reset( void )
  56.       @功能: AD9850复位
  57.       @返回值:无
  58.       @备注:无
  59.       @参数:无
  60. *********************************************/
  61. void AD9850_Reset( void )
  62. {
  63.     AD9850_WCLK_L;
  64.         AD9850_FQUD_L;
  65.         
  66.         //rest 信号
  67.         AD9850_RESET_L;
  68.         AD9850_RESET_H;
  69.         AD9850_RESET_L;

  70.         //WCLK信号
  71.         AD9850_WCLK_L;
  72.         AD9850_WCLK_H;
  73.         AD9850_WCLK_L;

  74.         //FQUD信号
  75.         AD9850_FQUD_L;
  76.         AD9850_FQUD_H;
  77.         AD9850_FQUD_L;
  78. }

  79. /*********************************************************
  80.             @函数:void ad9850_wr_serial(unsigned char w0,float  freq)
  81.             @功能:AD9850输出正弦波
  82.             @返回值:无
  83.             @参数:w0:w0为 一变量,不用管。
  84.                            frep:跟输出频率直接挂钩,单位为Khz
  85.             @备注:无

  86. **********************************************************/
  87. void AD9850_wr_serial(unsigned char w0,float frep)
  88. {
  89.    unsigned char i,w;
  90.         long int y = frep *(0x20C49BA)/1000;
  91. //写W4数据        
  92.         w=(y>>=0);
  93.     for(i=0;i<8;i++)
  94.     {
  95.       if(((w>>i)&0x01))
  96.       {
  97.         AD9850_Data_H;
  98.       }
  99.       else
  100.       {
  101.          AD9850_Data_L;
  102.       }
  103.    AD9850_WCLK_H;
  104.     AD9850_WCLK_L;
  105.     }
  106. //写W3数据
  107.     w=(y>>8);
  108.     for(i=0;i<8;i++)
  109.     {
  110.       if(((w>>i)&0x01))
  111.       {
  112.         AD9850_Data_H;
  113.       }
  114.       else
  115.       {
  116.          AD9850_Data_L;
  117.       }
  118.    AD9850_WCLK_H;
  119.     AD9850_WCLK_L;
  120.     }
  121. //写W2数据
  122.     w=(y>>16);
  123.     for(i=0;i<8;i++)
  124.     {
  125.      if(((w>>i)&0x01))
  126.       {
  127.         AD9850_Data_H;
  128.       }
  129.       else
  130.       {
  131.          AD9850_Data_L;
  132.       }
  133.    AD9850_WCLK_H;
  134.     AD9850_WCLK_L;
  135.     }
  136. //写W1数据
  137.     w=(y>>24);
  138.     for(i=0;i<8;i++)
  139.     {
  140.      if(((w>>i)&0x01))
  141.       {
  142.          AD9850_Data_H;
  143.       }
  144.       else
  145.       {
  146.        AD9850_Data_L;
  147.       }
  148.    AD9850_WCLK_H;
  149.     AD9850_WCLK_L;
  150.     }
  151.     //写W0数据
  152.     w=w0;   
  153.     for(i=0;i<8;i++)
  154.     {
  155.       if(((w>>i)&0x01))
  156.       {
  157.        AD9850_Data_H;
  158.       }
  159.       else
  160.       {
  161.      AD9850_Data_L;
  162.       }
  163.     AD9850_WCLK_H;
  164.     AD9850_WCLK_L;
  165.   }
  166.     //移入使能
  167.       AD9850_FQUD_H;
  168.       AD9850_FQUD_H;
  169. }  
  170.         
复制代码

所有资料51hei提供下载:
AD9850.7z (175.5 KB, 下载次数: 86)

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

使用道具 举报

沙发
ID:1 发表于 2019-8-18 00:55 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:282095 发表于 2019-8-18 09:06 | 只看该作者
资源不全 不太完整哦
回复

使用道具 举报

地板
ID:511461 发表于 2019-10-26 20:52 | 只看该作者
楼主程序挺好的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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