标题: AD9833信号发生器的STM32源程序与原理图等资料下载 [打印本页]

作者: sonywawano1    时间: 2018-11-14 22:50
标题: AD9833信号发生器的STM32源程序与原理图等资料下载
AD9833+STM32 信号发生器源程序


电路原理图如下:


AD9833的stm32单片机源程序如下:
  1. /*
  2. ******************************************************************************
  3.                         程序参考ADI,仅供参考交流和学习
  4. ******************************************************************************
  5. */

  6. #include "ad9833.h"
  7. #include "common.h"



  8. //***************************
  9. //                Pin assign                  
  10. //                STM32                        AD9833
  11. //                GPIOB_Pin_15                 ---> FSYNC
  12. //                GPIOB_Pin_14                 ---> SCK
  13. //                GPIOB_Pin_13                 ---> DAT
  14. //***************************       

  15.         /*端口定义 */
  16.         #define PORT_FSYNC        GPIOB
  17.         #define PIN_FSYNC        GPIO_Pin_15

  18.         #define PORT_SCK        GPIOB
  19.         #define PIN_SCK                GPIO_Pin_14

  20.         #define PORT_DAT        GPIOB
  21.         #define PIN_DAT                GPIO_Pin_13

  22. //****************************************************************

  23.         #define FSYNC_0()                GPIO_ResetBits(PORT_FSYNC, PIN_FSYNC)
  24.         #define FSYNC_1()                GPIO_SetBits(PORT_FSYNC, PIN_FSYNC)

  25.         #define SCK_0()                GPIO_ResetBits(PORT_SCK, PIN_SCK)
  26.         #define SCK_1()                GPIO_SetBits(PORT_SCK, PIN_SCK)

  27.         #define DAT_0()                GPIO_ResetBits(PORT_DAT, PIN_DAT)
  28.         #define DAT_1()                GPIO_SetBits(PORT_DAT, PIN_DAT)       


  29. //初始化AD9833 GPIO

  30. void AD9833_Init_GPIO()
  31. {
  32.     GPIO_InitTypeDef GPIO_InitStructure;
  33.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  34.     GPIO_InitStructure.GPIO_Pin = PIN_FSYNC|PIN_SCK|PIN_DAT;
  35.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  36.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  37.     GPIO_Init(PORT_SCK, &GPIO_InitStructure);
  38. }



  39. /*
  40. *********************************************************************************************************
  41. *        函 数 名: AD9833_Delay
  42. *        功能说明: 时钟延时
  43. *        形    参: 无
  44. *        返 回 值: 无
  45. *********************************************************************************************************
  46. */
  47. static void AD9833_Delay(void)
  48. {
  49.         uint16_t i;
  50.         for (i = 0; i < 1; i++);
  51. }



  52. /*
  53. *********************************************************************************************************
  54. *        函 数 名: AD9833_Write
  55. *        功能说明: 向SPI总线发送16个bit数据
  56. *        形    参: TxData : 数据
  57. *        返 回 值: 无
  58. *********************************************************************************************************
  59. */
  60. void AD9833_Write(unsigned int TxData)
  61. {
  62.         unsigned char i;

  63.         SCK_1();
  64.         //AD9833_Delay();
  65.         FSYNC_1();
  66.         //AD9833_Delay();
  67.         FSYNC_0();
  68.         //AD9833_Delay();
  69.         for(i = 0; i < 16; i++)
  70.         {
  71.                 if (TxData & 0x8000)
  72.                         DAT_1();
  73.                 else
  74.                         DAT_0();
  75.                
  76.                 AD9833_Delay();
  77.                 SCK_0();
  78.                 AD9833_Delay();               
  79.                 SCK_1();
  80.                
  81.                 TxData <<= 1;
  82.         }
  83.         FSYNC_1();
  84.        
  85. }

  86. /*
  87. *********************************************************************************************************
  88. *        函 数 名: AD9833_WaveSeting
  89. *        功能说明: 向SPI总线发送16个bit数据
  90. *        形    参: 1.Freq: 频率值, 0.1 hz - 12Mhz
  91.                           2.Freq_SFR: 0 或 1
  92.                           3.WaveMode: TRI_WAVE(三角波),SIN_WAVE(正弦波),SQU_WAVE(方波)
  93.                           4.Phase : 波形的初相位
  94. *        返 回 值: 无
  95. *********************************************************************************************************
  96. */
  97. void AD9833_WaveSeting(double Freq,unsigned int Freq_SFR,unsigned int WaveMode,unsigned int Phase )
  98. {

  99.                 int frequence_LSB,frequence_MSB,Phs_data;
  100.                 double   frequence_mid,frequence_DATA;
  101.                 long int frequence_hex;

  102.                 /*********************************计算频率的16进制值***********************************/
  103.                 frequence_mid=268435456/25;//适合25M晶振
  104.                 //如果时钟频率不为25MHZ,修改该处的频率值,单位MHz ,AD9833最大支持25MHz
  105.                 frequence_DATA=Freq;
  106.                 frequence_DATA=frequence_DATA/1000000;
  107.                 frequence_DATA=frequence_DATA*frequence_mid;
  108.                 frequence_hex=frequence_DATA;  //这个frequence_hex的值是32位的一个很大的数字,需要拆分成两个14位进行处理;
  109.                 frequence_LSB=frequence_hex; //frequence_hex低16位送给frequence_LSB
  110.                 frequence_LSB=frequence_LSB&0x3fff;//去除最高两位,16位数换去掉高位后变成了14位
  111.                 frequence_MSB=frequence_hex>>14; //frequence_hex高16位送给frequence_HSB
  112.                 frequence_MSB=frequence_MSB&0x3fff;//去除最高两位,16位数换去掉高位后变成了14位

  113.                 Phs_data=Phase|0xC000;        //相位值
  114.                 AD9833_Write(0x0100); //复位AD9833,即RESET位为1
  115.                 AD9833_Write(0x2100); //选择数据一次写入,B28位和RESET位为1

  116.                 if(Freq_SFR==0)                                  //把数据设置到设置频率寄存器0
  117.                 {
  118.                          frequence_LSB=frequence_LSB|0x4000;
  119.                          frequence_MSB=frequence_MSB|0x4000;
  120.                          //使用频率寄存器0输出波形
  121.                         AD9833_Write(frequence_LSB); //L14,选择频率寄存器0的低14位数据输入
  122.                         AD9833_Write(frequence_MSB); //H14 频率寄存器的高14位数据输入
  123.                         AD9833_Write(Phs_data);        //设置相位
  124.                         //AD9833_Write(0x2000); /**设置FSELECT位为0,芯片进入工作状态,频率寄存器0输出波形**/
  125.             }
  126.                 if(Freq_SFR==1)                                //把数据设置到设置频率寄存器1
  127.                 {
  128.                          frequence_LSB=frequence_LSB|0x8000;
  129.                          frequence_MSB=frequence_MSB|0x8000;
  130.                         //使用频率寄存器1输出波形
  131.                         AD9833_Write(frequence_LSB); //L14,选择频率寄存器1的低14位输入
  132.                         AD9833_Write(frequence_MSB); //H14 频率寄存器1为
  133.                         AD9833_Write(Phs_data);        //设置相位
  134.                         //AD9833_Write(0x2800); /**设置FSELECT位为0,设置FSELECT位为1,即使用频率寄存器1的值,芯片进入工作状态,频率寄存器1输出波形**/
  135.                 }

  136.                 if(WaveMode==TRI_WAVE) //输出三角波波形
  137.                          AD9833_Write(0x2002);
  138.                 if(WaveMode==SQU_WAVE)        //输出方波波形
  139.                         AD9833_Write(0x2028);
  140.                 if(WaveMode==SIN_WAVE)        //输出正弦波形
  141.                         AD9833_Write(0x2000);

  142. }
复制代码

所有资料51hei提供下载:
F07--AD9833.rar (1.3 MB, 下载次数: 678)



作者: 叫啥名字好呢979    时间: 2019-1-16 15:10
老哥那个30M的是不是有源晶振啊
作者: quinn1994    时间: 2019-3-14 15:50
叫啥名字好呢979 发表于 2019-1-16 15:10
老哥那个30M的是不是有源晶振啊

是的,我之前用过
作者: qq542731976    时间: 2019-3-16 16:13
谢谢分享!!
作者: guidian123    时间: 2019-3-27 17:08
我想要 哈哈哈         
作者: lzs321    时间: 2019-5-8 19:48
楼主大大,这个有完整和stm32连接的电路图吗?刚刚接触,谢谢了
作者: yiqinfeng    时间: 2019-5-27 17:11
楼主,请问stm32f103系列可以直接使用吗?
作者: xq129    时间: 2019-6-10 08:36
谢谢分享!!
作者: 长生者呆毛    时间: 2019-7-2 09:27
谢谢分享!!!!!
作者: YSWQ    时间: 2019-8-8 09:11
请问怎么设置正弦波的幅值啊
作者: 山有扶苏    时间: 2019-12-10 13:35
谢谢分享
作者: fanfande2    时间: 2020-1-1 11:18
谢谢分享

作者: 1141508805    时间: 2020-1-11 23:18
我也想要
作者: popo321    时间: 2020-3-12 09:18

谢谢分享!!
作者: dzcql    时间: 2020-4-2 15:14
谢谢分享
作者: guohua    时间: 2020-4-9 18:07
谢谢分享
作者: LCE    时间: 2020-7-25 14:24
请问接口mini的IO口怎么接
作者: LCE    时间: 2020-7-25 15:12
请问stm32的IO扣是上面的PB13到15吗?
作者: HLJ123    时间: 2020-7-31 15:55
用KE5来写.29个错误.30警告。楼主这要改得有点多
作者: 747040    时间: 2020-8-12 10:22
晶振是本来就有的还是要自己外加啊
作者: txzxg1316    时间: 2020-10-24 10:42
参考一下,谢谢楼主
作者: 96317    时间: 2021-4-6 09:56
quinn1994 发表于 2019-3-14 15:50
是的,我之前用过

四个脚这是有源晶振吧
作者: 1113877486    时间: 2021-5-4 18:03
楼主请问下你这个输出幅度是怎么控制的啊?

作者: 1113877486    时间: 2021-5-4 18:08
YSWQ 发表于 2019-8-8 09:11
请问怎么设置正弦波的幅值啊

同问,请问你现在知道了吗?可以指导下吗?
作者: hainucp    时间: 2021-8-1 17:25
刚运行了代码,stm32f103 可以运行,文件里面有AD9833和stm32连线图,感谢楼主!
作者: BCWGTeam    时间: 2022-1-9 11:41
请问怎么设置正弦波的幅值啊
作者: beyond021987    时间: 2023-6-26 00:10
现在还有人和我一样开始学吗
作者: ybp589    时间: 2025-3-5 21:20
感谢楼主,学习一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1