OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 18602|回复: 15

STM32与AD9833的源程序

[复制链接]

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-5-17
在线时间
11 小时
发表于 2015-8-26 11:43:01 | 显示全部楼层 |阅读模式
#include "ad9833.h"

void AD9833_Write(u16 Data)
{
// NSS_LOW = 1;
// NSS_LOW = 0;
//  SPI2_WriteByte(Data);
//  while((SPI2->SR & 1<<1) == 0);
// while((SPI1->SR & 1<<7) == 1);
//  NSS_LOW = 1;
// __nop();
// __nop();
u8 i;
AD9833_SCLK = 1;
AD9833_SDTA = 1;
AD9833_NSS = 1;

delay_us(2);

AD9833_NSS = 0;


for(i=0;i<16;i++)
{
 if(Data & 0x8000)
{
 AD9833_SDTA = 1;
}
else
{
 AD9833_SDTA = 0;
}

AD9833_SCLK = 0;


AD9833_SCLK = 1;


Data = Data<<1;
}

AD9833_NSS = 1;

AD9833_SCLK = 0;
}

void AD9833_Init(void)
{
RCC->APB2ENR |= 1<<3;//使能PORTB时钟
  GPIOB->CRH &= 0X0F00FFFF;//IO口清除原有设置
GPIOB->CRH |= 0X30330000;//PB13(SCK)、PB15(MOSI)、PB14(MIS0)采用复用功能推挽输出,输出最大速度为50MHZ,PA12(NSS)采用软件模式
  GPIOB->ODR |= (0xB)<<12;//PB12、PB13、PB14、PB15输出上拉设置

// AD9833_Write(0x0100); 
// AD9833_Write(0x2000);       //写寄存器,AD9833写1复位,确定传输数据为28位
AD9833_Write(0x2100);       //写寄存器,AD9833写1复位,确定传输数据为28位
AD9833_Write(0x4000);       //对频率寄存器0的LSB进行清0
AD9833_Write(0x4000);       //对频率寄存器0的MSB进行清0
AD9833_Write(0x2900);       //写寄存器,AD9833写1复位,确定传输数据为28位
// AD9833_Write(0x2000);       //写寄存器,AD9833写1复位,确定传输数据为28位
// AD9833_Write(0x0100); 
// AD9833_Write(0x2800);       //写寄存器,AD9833写1复位,确定传输数据为28位

AD9833_Write(0x8000);       //对频率寄存器1的LSB进行清0
AD9833_Write(0x8000);       //对频率寄存器1的MSB进行清0
AD9833_Write(0xD000);       //对相位寄存器0进行清0,16位
AD9833_Write(0xF000);       //对相位寄存器1进行清0,16位
// AD9833_Write(0x2000);       //写寄存器,AD9833写0取消复位,确定传输数据为28位

}

void AD9833_Out(u32 Freq_value,u16 Phase_value)//Freq_value取值范围为0~12,500,500HZ
{
u32 dds;
u16 dds1,dds2;
dds = Freq_value * (268.435456/25);
dds1 = dds & 0x3fff;
dds1 |= 0x4000;
dds = dds >> 14;
dds2 = dds & 0x3fff;
dds2 |= 0x4000;
AD9833_Write(0x2000);
AD9833_Write(dds1);
AD9833_Write(dds2);
  AD9833_Write(Phase_value);
}

[mw_shl_code=c,true]#ifndef __AD9833_H #define __AD9833_H #include "sys.h" #include "spi.h" #include "delay.h" #define AD9833_NSS PBout(12) //定义AD9833_NSS代表PB12的NSS,也代表AD9833的片选端 #define AD9833_SCLK PBout(13) //定义AD9833_SCLK代表PB13的SCK,也代表AD9833的时钟信号端 #define AD9833_SDTA PBout(15) //定义AD9833_SDTA代表PB12的MOSI,也代表AD9833的数据传输端 void AD9833_Write(u16 Data); //写指令和数据 void AD9833_Init(void); //AD9833初始化 void AD9833_Out(u32 Freq_value,u16 Phase_value);//Freq_value取值范围为0~12,500,500HZ #endif [/mw_shl_code]
[mw_shl_code=c,true]int main() { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 //SPI2_Init_Master(); AD9833_Init(); while(1) { AD9833_Out(2500000,0xC000); while(1); } }[/mw_shl_code]


固步自封于FLASH,只能机械性的运作,人应像翱翔天际的雄鹰,装载高速变化的CPU及强大的存储能力,摆脱老旧的结构束缚,翱翔在智能化信息的海洋。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-3
在线时间
17 小时
发表于 2018-10-18 08:44:17 | 显示全部楼层
楼主楼主,AD9833的峰峰值怎么调节?
回复 支持 3 反对 0

使用道具 举报

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-5-17
在线时间
11 小时
 楼主| 发表于 2015-8-26 14:54:41 | 显示全部楼层
经发现,AD9833的初始化程序,写“AD9833_Write(0x0100); AD9833_Write(0x2000)”先复位在写控制与“AD9833_Write(0x2100)”复位、控制一起写是没有什么区别,所以网上有人提供的源程序有以上两种编写方式,皆是正确无误的。在我验证AD9833的波形的过程中,发生波形没法产生的现象,原因不是编写AD9833_Write函数的时序问题(这个不是很严格的,只要你大于手册里面最小时间即可),也不是AD9833初始化配置错误,而是在选定三个输出端口的配置上出现问题。我原来想用SPI通信方式来产生波形,但后来转用软件模拟SPI却没把SPI的复用推挽输出设置改为IO端口的通用推挽输出,所以才会一直看不到波形的产生。
固步自封于FLASH,只能机械性的运作,人应像翱翔天际的雄鹰,装载高速变化的CPU及强大的存储能力,摆脱老旧的结构束缚,翱翔在智能化信息的海洋。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-9-21
在线时间
1 小时
发表于 2015-9-21 11:38:27 | 显示全部楼层
回复【2楼】明书:
---------------------------------
楼主的程序能发我一份吗,我最近也用到了ad9833芯片,但是信号一直调出不来。。。。776982768@qq.com
回复 支持 反对

使用道具 举报

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-5-17
在线时间
11 小时
 楼主| 发表于 2015-9-22 14:20:07 | 显示全部楼层
回复【3楼】浪客剑心lu:
---------------------------------
上面的就是的,第一个是AD9833的C语言,第二个是AD9833的H文件,第三个就是主函数。没出来有可能是你的低通滤波的选择截止频率要选择好,还有你们的IO口选择配置要对,其次就是你的有源晶振要有输出,最后就是你的AD9833芯片要检查有没有问题。
固步自封于FLASH,只能机械性的运作,人应像翱翔天际的雄鹰,装载高速变化的CPU及强大的存储能力,摆脱老旧的结构束缚,翱翔在智能化信息的海洋。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-9-22 22:26:03 | 显示全部楼层
谢谢分享....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-1-5
在线时间
15 小时
发表于 2016-1-29 16:34:33 | 显示全部楼层
楼主为什么要用软件模拟spi,为什么不用片上的spi
回复 支持 反对

使用道具 举报

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-5-17
在线时间
11 小时
 楼主| 发表于 2016-2-1 17:03:31 | 显示全部楼层
jtjtjtt 发表于 2016-1-29 16:34
楼主为什么要用软件模拟spi,为什么不用片上的spi

这个是其中一个办法,只是我之前可能因为元器件的原因,使用片上SPI总是输出波形有问题,所以后来使用了软件模拟SPI
固步自封于FLASH,只能机械性的运作,人应像翱翔天际的雄鹰,装载高速变化的CPU及强大的存储能力,摆脱老旧的结构束缚,翱翔在智能化信息的海洋。
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2017-6-28
在线时间
10 小时
发表于 2017-10-21 11:40:04 | 显示全部楼层
刚刚在研究这个,谢谢楼主的分享。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-4-19
在线时间
3 小时
发表于 2018-4-23 11:03:11 | 显示全部楼层
本帖最后由 szl961005 于 2018-4-23 13:20 编辑

用模拟spi与ad9833通讯可以,用硬件的不行不知道为什么,有成功的吗分享一下。(两个stm32片子可以用spi正常通讯)SPI_CPOL_High; SPI_CPHA_1Edge;我用的stm32F207的片子
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-3
在线时间
17 小时
发表于 2018-10-9 08:55:44 | 显示全部楼层
请教一下楼主,你用AD9833的时候有没有使用DDS驱动板?
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2017-4-24
在线时间
36 小时
发表于 2018-10-15 15:46:08 | 显示全部楼层
szl961005 发表于 2018-4-23 11:03
**** 作者被禁止或删除 内容自动屏蔽 ****

会不会是速度太快了,没设置好,AD9833好多要求几十ns的时间宽度的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-2-2
在线时间
8 小时
发表于 2019-3-16 17:46:56 | 显示全部楼层
怎么进行多通道输出呢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-5-8
在线时间
0 小时
发表于 2019-5-8 19:56:28 | 显示全部楼层
楼主大大,求完整的电路图,就是和stm32连接的电路图
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-10-15
在线时间
3 小时
发表于 2022-2-21 20:28:16 | 显示全部楼层
程序很好用,感谢楼主!!!
回复 支持 反对

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
995
金钱
995
注册时间
2017-8-19
在线时间
160 小时
发表于 2024-3-31 17:08:21 | 显示全部楼层
刚在学用这个网络上的模块,程序有一个问题就是怎么知道你写入的数据是写给哪个寄存器?这个是怎么控制的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 05:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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