找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11002|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于STM32F407的AD9834驅(qū)動程序源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:370382 發(fā)表于 2018-7-12 17:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
寫得不是很好,拿出來分享一下,希望大家能夠提點建議!
/* 注:使用時先調(diào)用初始化函數(shù)初始化IO配置,然后調(diào)用AD9834_Select_Wave()選擇波形,最后選擇頻率值即可輸出。 */

stm32源碼如下:
  1. //================AD9834.h======================//
  2. /*-----------------------------------------------------
  3.                     AD9834驅(qū)動程序
  4.                     STM32固件函數(shù)庫V2.0
  5.                     2011.3.29
  6. -------------------------------------------------------*/
  7. #ifndef __AD9834_H
  8. #define __AD9834_H
  9. #include "stm32f10x_lib.h"
  10. #define Triangle_Wave    0x2002
  11. #define Sine_Wave  0x2028
  12. /* AD9834晶振頻率 */
  13. #define AD9834_SYSTEM_COLCK     50000000UL
  14. /* AD9834 控制引腳 */
  15. #define AD9834_Control_Port     GPIOC
  16. #define AD9834_FSYNC            GPIO_Pin_6
  17. #define AD9834_SCLK             GPIO_Pin_7
  18. #define AD9834_SDATA            GPIO_Pin_8
  19. #define AD9834_RESET            GPIO_Pin_9
  20. #define AD9834_FSYNC_SET   GPIO_SetBits(AD9834_Control_Port ,AD9834_FSYNC)
  21. #define AD9834_FSYNC_CLR   GPIO_ResetBits(AD9834_Control_Port ,AD9834_FSYNC)
  22. #define AD9834_SCLK_SET   GPIO_SetBits(AD9834_Control_Port ,AD9834_SCLK)
  23. #define AD9834_SCLK_CLR   GPIO_ResetBits(AD9834_Control_Port ,AD9834_SCLK)
  24. #define AD9834_SDATA_SET   GPIO_SetBits(AD9834_Control_Port ,AD9834_SDATA)
  25. #define AD9834_SDATA_CLR   GPIO_ResetBits(AD9834_Control_Port ,AD9834_SDATA)
  26. #define AD9834_RESET_SET   GPIO_SetBits(AD9834_Control_Port ,AD9834_RESET)
  27. #define AD9834_RESET_CLR   GPIO_ResetBits(AD9834_Control_Port ,AD9834_RESET)

  28. #define FREQ_0      0
  29. #define FREQ_1      1

  30. #define DB15        0
  31. #define DB14        0
  32. #define DB13        B28
  33. #define DB12        HLB
  34. #define DB11        FSEL
  35. #define DB10        PSEL
  36. #define DB9         PIN_SW
  37. #define DB8         RESET
  38. #define DB7         SLEEP1
  39. #define DB6         SLEEP12
  40. #define DB5         OPBITEN
  41. #define DB4         SIGN_PIB
  42. #define DB3         DIV2
  43. #define DB2         0
  44. #define DB1         MODE
  45. #define DB0         0
  46. #define CONTROL_REGISTER    (DB15<<15)|(DB14<<14)|(DB13<<13)|(DB12<<12)|(DB11<<11)|(DB10<<10)\
  47.     |(DB9<<9)|(DB8<<8)|(DB7<<7)|(DB6<<6)|(DB5<<5)|(DB4<<4)|(DB3<<3)|(DB2<<2)|(DB1<<1)|(DB0<<0)
  48. /* AD9834函數(shù)聲明 */
  49. extern void AD9834_Write_16Bits(unsigned int data) ;  //寫一個字到AD9834
  50. extern void AD9834_Select_Wave(unsigned int initdata) ; //選擇輸出波形
  51. extern void Init_AD9834() ;//初始化配置
  52. extern void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq) ;//選擇輸出寄存器和輸出頻率值
  53. #endif /* AD9834_H */
  54. //================================================================//
  55. //====================AD9834.c====================================//
  56. #include "stm32f10x_lib.h"
  57. #include "AD9834.h"

  58. /****************************************************************
  59. 函數(shù)名稱: AD9834_Write_16Bits
  60. 功    能: 向AD9834寫入16為數(shù)據(jù)
  61. 參    數(shù): data --  要寫入的16位數(shù)據(jù)
  62. 返回值  : 無
  63. *****************************************************************/
  64. void AD9834_Write_16Bits(unsigned int data)
  65. {
  66.     unsigned char i = 0 ;
  67.    
  68.     AD9834_SCLK_SET ;
  69.     AD9834_FSYNC_CLR ;
  70.     for(i=0 ;i<16 ;i++)
  71.     {
  72.         if(data & 0x8000)
  73.           AD9834_SDATA_SET ;
  74.         else
  75.           AD9834_SDATA_CLR ;
  76.         
  77.         AD9834_SCLK_CLR ;
  78.         data <<= 1 ;
  79.         AD9834_SCLK_SET ;
  80.     }
  81.    
  82.     AD9834_FSYNC_SET ;
  83. }
  84. /***********************************************************************************
  85. 函數(shù)名稱:AD9834_Select_Wave
  86. 功    能:軟件為控制,
  87.     --------------------------------------------------
  88.     IOUT正弦波 ,SIGNBITOUT方波 ,寫FREQREG0 ,寫PHASE0
  89.     ad9834_write_16bit(0x2028)   一次性寫FREQREG0
  90.     ad9834_write_16bit(0x0038)   單獨改寫FREQREG0的LSB
  91.     ad9834_write_16bit(0x1038)   單獨改寫FREQREG0的MSB
  92.     --------------------------------------------------
  93.     IOUT三角波 ,寫PHASE0
  94.     ad9834_write_16bit(0x2002)   一次性寫FREQREG0
  95.     ad9834_write_16bit(0x0002)   單獨改寫FREQREG0的LSB
  96.     ad9834_write_16bit(0x1008)   單獨改寫FREQREG0的MSB
  97. 參    數(shù):initdata -- 要輸入的命令
  98. 返回值  :無
  99. ************************************************************************************/
  100. void AD9834_Select_Wave(unsigned int initdata)
  101. {
  102.     AD9834_FSYNC_SET;
  103.     AD9834_SCLK_SET;
  104.    
  105.     AD9834_RESET_SET;
  106.     AD9834_RESET_SET;
  107.     AD9834_RESET_CLR;
  108.      
  109.     AD9834_Write_16Bits(initdata);
  110. }
  111. /****************************************************************
  112. 函數(shù)名稱: Init_AD9834
  113. 功    能: 初始化AD9834控制引腳
  114. 參    數(shù): 無
  115. 返回值  : 無
  116. *****************************************************************/
  117. void Init_AD9834()
  118. {
  119.     GPIO_InitTypeDef GPIO_InitStructure ;
  120.     GPIO_InitStructure.GPIO_Pin = AD9834_FSYNC | AD9834_SCLK | AD9834_SDATA | AD9834_RESET ;
  121.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
  122.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
  123.     GPIO_Init(AD9834_Control_Port ,&GPIO_InitStructure) ;
  124. }
  125. /****************************************************************
  126. 函數(shù)名稱: AD9834_Set_Freq
  127. 功    能: 設(shè)置頻率值
  128. 參    數(shù): freq_number -- 要寫入的平率寄存器(FREQ_0或FREQ_1)
  129.           freq -- 頻率值 (Freq_value(value)=Freq_data(data)*FCLK/2^28)
  130. 返回值  : 無
  131. *****************************************************************/
  132. void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq)
  133. {
  134.     unsigned long FREQREG = (unsigned long)(268435456.0/AD9834_SYSTEM_COLCK*freq);
  135.    
  136.     unsigned int FREQREG_LSB_14BIT = (unsigned int)FREQREG;
  137.     unsigned int FREQREG_MSB_14BIT = (unsigned int)(FREQREG>>14);
  138.    
  139.     if(freq_number == FREQ_0)
  140.     {
  141.         FREQREG_LSB_14BIT &= ~(1U<<15);
  142.         FREQREG_LSB_14BIT |= 1<<14;
  143.         FREQREG_MSB_14BIT &= ~(1U<<15);
  144.         FREQREG_MSB_14BIT |= 1<<14;
  145.     }
  146.     else
  147.     {
  148.         FREQREG_LSB_14BIT &= ~(1<<14);
  149.         FREQREG_LSB_14BIT |= 1U<<15;
  150.         FREQREG_MSB_14BIT &= ~(1<<14);
  151.         FREQREG_MSB_14BIT |= 1U<<15;
  152.     }
  153.    
  154.     AD9834_Write_16Bits(FREQREG_LSB_14BIT);
  155.     AD9834_Write_16Bits(FREQREG_MSB_14BIT);
  156.    
  157. }
  158. //============================================================//

復(fù)制代碼

完整的Word格式文檔51黑下載地址:
基于STM32的-AD9834-驅(qū)動程序.doc (37 KB, 下載次數(shù): 101)



評分

參與人數(shù) 1黑幣 +4 收起 理由
muyichuan2012 + 4 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:307065 發(fā)表于 2019-7-27 09:37 | 只看該作者
感覺在選擇波形的寄存器配置好像有點問題?
回復(fù)

使用道具 舉報

板凳
ID:263693 發(fā)表于 2020-2-1 14:47 | 只看該作者
下載下來學(xué)習(xí)一下,用407感覺有點浪費啊
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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