写得不是很好,拿出来分享一下,希望大家能够提点建议!
/* 注:使用时先调用初始化函数初始化IO配置,然后调用AD9834_Select_Wave()选择波形,最后选择频率值即可输出。 */
stm32源码如下:
- //================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 GPIO_ResetBits(AD9834_Control_Port ,AD9834_RESET)
- #define FREQ_0 0
- #define FREQ_1 1
- #define DB15 0
- #define DB14 0
- #define DB13 B28
- #define DB12 HLB
- #define DB11 FSEL
- #define DB10 PSEL
- #define DB9 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);
-
- }
- //============================================================//
-
复制代码
完整的Word格式文档51黑下载地址:
基于STM32的-AD9834-驱动程序.doc
(37 KB, 下载次数: 101)
|