您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于STM32的 AD9834 驱动程序

基于STM32的 AD9834 驱动程序

来源:华佗小知识


//================AD9834.h======================//

/*-----------------------------------------------------

AD9834驱动程序

STM32固件函数库V2.0

2011.3.29

-------------------------------------------------------*/

#ifndef __AD9834_H

#define __AD9834_H

#include \"stm32f10x_lib.h\"

#define Triangle_Wave 0x2002

#define Sine_Wave 0x2028

/* AD9834晶振频率 */

#define AD9834_SYSTEM_COLCK 50000000UL

/* AD9834 控制引脚 */

#define AD9834_Control_Port GPIOC

#define AD9834_FSYNC GPIO_Pin_6

#define AD9834_SCLK GPIO_Pin_7

#define AD9834_SDATA GPIO_Pin_8

#define AD9834_RESET GPIO_Pin_9

#define

AD9834_FSYNC_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_FSYNC)

#define

AD9834_FSYNC_CLR GPIO_ResetBits(AD9834_Control_Port ,AD9834_FSYNC)

#define

AD9834_SCLK_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_SCLK)

#define

AD9834_SCLK_CLR GPIO_ResetBits(AD9834_Control_Port ,AD9834_SCLK)

#define

AD9834_SDATA_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_SDATA)

#define

AD9834_SDATA_CLR GPIO_ResetBits(AD9834_Control_Port ,AD9834_SDATA)

#define

AD9834_RESET_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_RESET)

#define

AD9834_RESET_CLR #define FREQ_0 #define FREQ_1 #define DB15 #define DB14 #define DB13 #define DB12 #define DB11 #define DB10 #define DB9 GPIO_ResetBits(AD9834_Control_Port ,AD9834_RESET)

0

1

0

0

B28

HLB

FSEL

PSEL

PIN_SW

#define DB8 RESET

#define DB7 SLEEP1

#define DB6 SLEEP12

#define DB5 OPBITEN

#define DB4 SIGN_PIB

#define DB3 DIV2

#define DB2 0

#define DB1 MODE

#define DB0 0

#define

CONTROL_REGISTER (DB15<<15)|(DB14<<14)|(DB13<<13)|(DB12<<12)|(DB11<<11)|(DB10<<10)\\

|(DB9<<9)|(DB8<<8)|(DB7<<7)|(DB6<<6)|(DB5<<5)|(DB4<<4)|(DB3<<3)|(DB2<<2)|(DB1<<1)|(DB0<<0)

/* AD9834函数声明 */

extern void AD9834_Write_16Bits(unsigned int data) ; //写一个字到AD9834

extern void AD9834_Select_Wave(unsigned int initdata) ; //选择输出波形

extern void Init_AD9834() ;//初始化配置

extern void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq) ;//选择输出寄存器和输出频率值

#endif /* AD9834_H */

//================================================================//

//====================AD9834.c====================================//

#include \"stm32f10x_lib.h\"

#include \"AD9834.h\"

/****************************************************************

函数名称: AD9834_Write_16Bits

功 能: 向AD9834写入16为数据

参 数: data -- 要写入的16位数据

返回值 : 无

*****************************************************************/

void AD9834_Write_16Bits(unsigned int data)

{

unsigned char i = 0 ;

AD9834_SCLK_SET ;

AD9834_FSYNC_CLR ;

for(i=0 ;i<16 ;i++)

{

if(data & 0x8000)

AD9834_SDATA_SET ;

else

AD9834_SDATA_CLR ;

AD9834_SCLK_CLR ;

data <<= 1 ;

AD9834_SCLK_SET ;

}

AD9834_FSYNC_SET ;

}

/***********************************************************************************

函数名称:AD9834_Select_Wave

功 能:软件为控制,

--------------------------------------------------

IOUT正弦波 ,SIGNBITOUT方波 ,写FREQREG0 ,写PHASE0

ad9834_write_16bit(0x2028) 一次性写FREQREG0

ad9834_write_16bit(0x0038) 单独改写FREQREG0的LSB

ad9834_write_16bit(0x1038) 单独改写FREQREG0的MSB

--------------------------------------------------

IOUT三角波 ,写PHASE0

ad9834_write_16bit(0x2002) 一次性写FREQREG0

ad9834_write_16bit(0x0002) 单独改写FREQREG0的LSB

ad9834_write_16bit(0x1008) 单独改写FREQREG0的MSB

参 数:initdata -- 要输入的命令

返回值 :无

************************************************************************************/

void AD9834_Select_Wave(unsigned int initdata)

{

AD9834_FSYNC_SET;

AD9834_SCLK_SET;

AD9834_RESET_SET;

AD9834_RESET_SET;

AD9834_RESET_CLR;

AD9834_Write_16Bits(initdata);

}

/****************************************************************

函数名称: Init_AD9834

功 能: 初始化AD9834控制引脚

参 数: 无

返回值 : 无

*****************************************************************/

void Init_AD9834()

{

GPIO_InitTypeDef GPIO_InitStructure ;

GPIO_InitStructure.GPIO_Pin = AD9834_FSYNC | AD9834_SCLK AD9834_SDATA | AD9834_RESET ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;

GPIO_Init(AD9834_Control_Port ,&GPIO_InitStructure) ;

}

/****************************************************************

函数名称: AD9834_Set_Freq

功 能: 设置频率值

参 数: freq_number -- 要写入的平率寄存器(FREQ_0或FREQ_1)

|

freq -- 频率值 (Freq_value(value)=Freq_data(data)*FCLK/2^28)

返回值 : 无

*****************************************************************/

void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq)

{

unsigned long FREQREG = (unsigned

long)(268435456.0/AD9834_SYSTEM_COLCK*freq);

unsigned int FREQREG_LSB_14BIT = (unsigned int)FREQREG;

unsigned int FREQREG_MSB_14BIT = (unsigned int)(FREQREG>>14);

if(freq_number == FREQ_0)

{

FREQREG_LSB_14BIT &= ~(1U<<15);

FREQREG_LSB_14BIT |= 1<<14;

FREQREG_MSB_14BIT &= ~(1U<<15);

FREQREG_MSB_14BIT |= 1<<14;

}

else

{

FREQREG_LSB_14BIT &= ~(1<<14);

FREQREG_LSB_14BIT |= 1U<<15;

FREQREG_MSB_14BIT &= ~(1<<14);

FREQREG_MSB_14BIT |= 1U<<15;

}

AD9834_Write_16Bits(FREQREG_LSB_14BIT);

AD9834_Write_16Bits(FREQREG_MSB_14BIT);

}

//============================================================//

/* 注:使用时先调用初始化函数初始化IO配置,然后调用AD9834_Select_Wave()选择波形,最后选择频率值即可输出。 */

写得不是很好,拿出来分享一下,希望大家能够提点建议!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务