标题:
AD9851的STM32驱动程序
[打印本页]
作者:
tigerc
时间:
2019-9-17 21:13
标题:
AD9851的STM32驱动程序
在下载过一个AD9851的51单片机的驱动程序,结果串口无法使用。后阅读AD9851芯片资料发现串口需要模式转化,方法是W0输入xxxxx011然后FQ_UD给一个上升沿则进入串行通信模式,再给一个RESET信号则回到并行模式。奉上我自己写的STM32的驱动程序以供各位参考和使用。
单片机源程序如下:
#include "AD9851.h"
void AD9851_init(unsigned char w0, double frequence)
{
GPIO_InitTypeDef GPIO_InitStructure;
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振
//如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
RCC_APB2PeriphClockCmd (AD9851_port_clk, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = AD9851_W_CLK_Pin | AD9851_FQ_UD_Pin | AD9851_RESET_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(AD9851_port, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(AD9851_data_port, &GPIO_InitStructure);
AD9851_W_CLK_0;
AD9851_FQ_UD_0;
AD9851_RESET_0;
AD9851_byte((w0 << 3));
AD9851_byte((y >> 24) & 0xff);
AD9851_byte((y >> 16) & 0xff);
AD9851_byte((y >> 8) & 0xff);
AD9851_byte(y & 0xff);
}
uchar AD9851_byte(uchar data)
{
GPIO_Write(AD9851_data_port, data);
AD9851_W_CLK_1;
AD9851_DELAY;
AD9851_W_CLK_0;
}
void AD9851_init_serial(unsigned char w0, double frequence)
{
GPIO_InitTypeDef GPIO_InitStructure;
long int y = 0;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振
//如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
RCC_APB2PeriphClockCmd (AD9851_port_clk, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = AD9851_W_CLK_Pin | AD9851_FQ_UD_Pin | AD9851_RESET_Pin | AD9851_D7_s_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(AD9851_port, &GPIO_InitStructure);
AD9851_W_CLK_0;
AD9851_FQ_UD_0;
AD9851_RESET_0;
AD9851_D7_s_0;
//串行数据初始化,记得此时W0出入xxxxx011.
AD9851_W_CLK_1;
AD9851_DELAY;
AD9851_W_CLK_0;
AD9851_DELAY;
AD9851_FQ_UD_1;
AD9851_DELAY;
AD9851_FQ_UD_0;
AD9851_DELAY;
AD9851_serial_byte((w0 << 3));
AD9851_serial_byte((y >> 24) & 0xff);
AD9851_serial_byte((y >> 16) & 0xff);
AD9851_serial_byte((y >> 8) & 0xff);
AD9851_serial_byte(y & 0xff);
AD9851_FQ_UD_1;
AD9851_DELAY;
AD9851_FQ_UD_0;
}
uchar AD9851_serial_byte(uchar data)
{
int i, bit;
for(i = 8;i > 0;i--)
{
if(data & (0x01 << (i - 1)))
{
AD9851_D7_s_1;
AD9851_W_CLK_1;
AD9851_DELAY;
AD9851_W_CLK_0;
}
else
{
AD9851_D7_s_0;
AD9851_W_CLK_1;
AD9851_DELAY;
AD9851_W_CLK_0;
}
}
}
void ad9850_reset()
{
AD9851_W_CLK_0;
AD9851_FQ_UD_0;
//rest信号
AD9851_RESET_0;
AD9851_DELAY;
AD9851_RESET_1;
AD9851_DELAY;
AD9851_RESET_0;
}
复制代码
0.png
(7.68 KB, 下载次数: 64)
下载附件
2019-9-17 22:59 上传
所有资料51hei提供下载:
AD9851.zip
(4.08 KB, 下载次数: 52)
2019-9-17 21:12 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1