標(biāo)題:
AD9851的STM32驅(qū)動程序
[打印本頁]
作者:
tigerc
時(shí)間:
2019-9-17 21:13
標(biāo)題:
AD9851的STM32驅(qū)動程序
在下載過一個(gè)AD9851的51單片機(jī)的驅(qū)動程序,結(jié)果串口無法使用。后閱讀AD9851芯片資料發(fā)現(xiàn)串口需要模式轉(zhuǎn)化,方法是W0輸入xxxxx011然后FQ_UD給一個(gè)上升沿則進(jìn)入串行通信模式,再給一個(gè)RESET信號則回到并行模式。奉上我自己寫的STM32的驅(qū)動程序以供各位參考和使用。
單片機(jī)源程序如下:
#include "AD9851.h"
void AD9851_init(unsigned char w0, double frequence)
{
GPIO_InitTypeDef GPIO_InitStructure;
unsigned char w;
long int y;
double x;
//計(jì)算頻率的HEX值
x=4294967295/125;//適合125M晶振
//如果時(shí)鐘頻率不為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;
//計(jì)算頻率的HEX值
x=4294967295/125;//適合125M晶振
//如果時(shí)鐘頻率不為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;
//串行數(shù)據(jù)初始化,記得此時(shí)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;
}
復(fù)制代碼
0.png
(7.68 KB, 下載次數(shù): 64)
下載附件
2019-9-17 22:59 上傳
所有資料51hei提供下載:
AD9851.zip
(4.08 KB, 下載次數(shù): 52)
2019-9-17 21:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1