久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11102|回復: 2
收起左側

基于STM32F407的AD9834驅動程序源碼

[復制鏈接]
ID:370382 發表于 2018-7-12 17:26 | 顯示全部樓層 |閱讀模式
寫得不是很好,拿出來分享一下,希望大家能夠提點建議!
/* 注:使用時先調用初始化函數初始化IO配置,然后調用AD9834_Select_Wave()選擇波形,最后選擇頻率值即可輸出。 */

stm32源碼如下:
  1. //================AD9834.h======================//
  2. /*-----------------------------------------------------
  3.                     AD9834驅動程序
  4.                     STM32固件函數庫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函數聲明 */
  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. 函數名稱: AD9834_Write_16Bits
  60. 功    能: 向AD9834寫入16為數據
  61. 參    數: data --  要寫入的16位數據
  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. 函數名稱: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. 參    數: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. 函數名稱: Init_AD9834
  113. 功    能: 初始化AD9834控制引腳
  114. 參    數: 無
  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. 函數名稱: AD9834_Set_Freq
  127. 功    能: 設置頻率值
  128. 參    數: 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. //============================================================//

復制代碼

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



評分

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

查看全部評分

回復

使用道具 舉報

ID:307065 發表于 2019-7-27 09:37 | 顯示全部樓層
感覺在選擇波形的寄存器配置好像有點問題?
回復

使用道具 舉報

ID:263693 發表于 2020-2-1 14:47 | 顯示全部樓層
下載下來學習一下,用407感覺有點浪費啊
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩中文字幕在线 | 人妖videosex高潮另类 | 欧美在线国产精品 | 久国产视频 | 欧美中文字幕一区二区三区亚洲 | 日韩国产精品一区二区三区 | 亚洲成人av | 欧美精品一区二区三区蜜桃视频 | 精品国产一区二区国模嫣然 | 中文字幕在线免费视频 | 久久蜜桃资源一区二区老牛 | 成人av网站在线观看 | 欧美8一10sex性hd | 国产精品久久精品 | a在线免费观看 | h视频在线观看免费 | 精品久久影院 | 亚洲久草 | 2021狠狠天天天 | 免费特级黄毛片 | 欧美久久一级 | av网站免费观看 | 国产日韩精品在线 | 亚洲成人在线视频播放 | 91久久久久久久久久久 | 91精品国产综合久久久久久漫画 | 免费一区二区 | 国产小视频在线观看 | 久免费视频 | 日本午夜精品一区二区三区 | 亚洲天天干| 高清国产午夜精品久久久久久 | 久久蜜桃资源一区二区老牛 | 亚洲免费一区 | 国产精品久久久免费 | 欧美影院| 色呦呦在线| 欧美一级淫片免费视频黄 | 亚洲乱码一区二区 | 久久一区 | 九九爱这里只有精品 |