寫得不是很好,拿出來分享一下,希望大家能夠提點建議!
/* 注:使用時先調(diào)用初始化函數(shù)初始化IO配置,然后調(diào)用AD9834_Select_Wave()選擇波形,最后選擇頻率值即可輸出。 */
stm32源碼如下:
- //================AD9834.h======================//
- /*-----------------------------------------------------
- AD9834驅(qū)動程序
- STM32固件函數(shù)庫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函數(shù)聲明 */
- 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"
- /****************************************************************
- 函數(shù)名稱: AD9834_Write_16Bits
- 功 能: 向AD9834寫入16為數(shù)據(jù)
- 參 數(shù): data -- 要寫入的16位數(shù)據(jù)
- 返回值 : 無
- *****************************************************************/
- 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 ;
- }
- /***********************************************************************************
- 函數(shù)名稱: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
- 參 數(shù):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);
- }
- /****************************************************************
- 函數(shù)名稱: Init_AD9834
- 功 能: 初始化AD9834控制引腳
- 參 數(shù): 無
- 返回值 : 無
- *****************************************************************/
- 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) ;
- }
- /****************************************************************
- 函數(shù)名稱: AD9834_Set_Freq
- 功 能: 設(shè)置頻率值
- 參 數(shù): 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);
-
- }
- //============================================================//
-
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
基于STM32的-AD9834-驅(qū)動程序.doc
(37 KB, 下載次數(shù): 101)
2018-7-12 17:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|