找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4730|回復(fù): 3
收起左側(cè)

AD9850模塊STM32程序 輸出頻率可調(diào)的正弦波

[復(fù)制鏈接]
ID:377919 發(fā)表于 2019-8-17 09:18 | 顯示全部樓層 |閱讀模式
前些天由于某種原因,收集了點(diǎn)AD9850的資料
附上自己寫的AD9850的程序,供大家參考,輸出的是頻率可調(diào)的正弦波

單片機(jī)源程序如下:
  1. /********************************************
  2. *********************************************/

  3. #include "DA9850.h"

  4. /******************************************
  5.     @函數(shù):void GPIO_Configuration(void)
  6.     @功能:AD9850對應(yīng)管腳的初始化
  7.         @返回值:無
  8.         @參數(shù):無
  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.      @函數(shù):void RCC_Configuration(void)
  24.      @功能:RCC初始化
  25.      @返回值:無
  26.      @參數(shù):無
  27.      @備注:這個函數(shù)可以注釋掉,頻率震蕩會增加
  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.       @函數(shù):void AD9850_Reset( void )
  56.       @功能: AD9850復(fù)位
  57.       @返回值:無
  58.       @備注:無
  59.       @參數(shù):無
  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.             @函數(shù):void ad9850_wr_serial(unsigned char w0,float  freq)
  81.             @功能:AD9850輸出正弦波
  82.             @返回值:無
  83.             @參數(shù):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數(shù)據(jù)        
  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數(shù)據(jù)
  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數(shù)據(jù)
  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數(shù)據(jù)
  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數(shù)據(jù)
  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.         
復(fù)制代碼

所有資料51hei提供下載:
AD9850.7z (175.5 KB, 下載次數(shù): 86)

回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2019-8-18 00:55 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

ID:282095 發(fā)表于 2019-8-18 09:06 | 顯示全部樓層
資源不全 不太完整哦
回復(fù)

使用道具 舉報

ID:511461 發(fā)表于 2019-10-26 20:52 | 顯示全部樓層
樓主程序挺好的
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表