收藏 分销(赏)

基于STM32的AD9850驱动程序.doc

上传人:精**** 文档编号:10399628 上传时间:2025-05-26 格式:DOC 页数:7 大小:33.50KB
下载 相关 举报
基于STM32的AD9850驱动程序.doc_第1页
第1页 / 共7页
基于STM32的AD9850驱动程序.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述
//========================AD9850.h=============================// /*--------------------------------------------             AD9850驱动程序 ----------------------------------------------*/ #ifndef __AD9850_H #define __AD9850_H /*选择数据通信方式,只能选择一个*/ //#define MODE_SEIAL   //串行模式 #define MODE_PARALLEL  //并行模式 #define AD9850_SYSTEM_COLCK     100000000 /* AD9850 控制和数据引脚定义 */ #define AD9850_CONTROL_PORT  GPIOA #define AD9850_FQUD   GPIO_Pin_2 #define AD9850_WCLK   GPIO_Pin_3 #define AD9850_RST    GPIO_Pin_4 #ifdef MODE_PARALLEL  //并行模式数据口0~7 #define AD9850_DATA_PORT  GPIOC #endif #ifdef MODE_SEIAL   //串行模式数据口   #define AD9850_DATA   GPIO_Pin_5  #define AD9850_DATA_Write_1     GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_DATA,Bit_SET) #define AD9850_DATA_Write_0     GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_DATA,Bit_RESET) #endif #define AD9850_WCLK_SET    GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_WCLK,Bit_SET) #define AD9850_WCLK_CLR    GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_WCLK,Bit_RESET) #define AD9850_FQUD_SET    GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_FQUD,Bit_SET) #define AD9850_FQUD_CLR    GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_FQUD,Bit_RESET) #define AD9850_RST_SET     GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_RST,Bit_SET) #define AD9850_RST_CLR     GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_RST,Bit_RESET) /* 串行模式操作函数 */ #ifdef MODE_SEIAL    extern void AD9850_Reset_Sreial(void) ; extern void AD9850_Write_Serial(unsigned char W0,unsigned long freq) ; #endif /* 并行模式操作函数 */ #ifdef MODE_PARALLEL extern void AD9850_Reset_Parallel(void) ; extern void AD9850_Write_Parallel(unsigned char W0,unsigned long freq) ; #endif extern void Init_AD9850(void) ; #endif /* AD8950_H */ //==================================================================// //=========================AD9850.c=================================// #include "stm32f10x_lib.h" #include "AD9850.h" /******************************************** 函数名称:AD9850_Delay 功    能:AD9850延时函数 参    数:z - 延时长度 返回值  :无 *********************************************/ void AD9850_Delay(unsigned int z) {     for(;z>0;z--)     {;} } /*--------------------并行模式-----------------------*/ #ifdef MODE_PARALLEL   /******************************************** 函数名称:AD9850_Reset_Parallel 功    能:在并行模式下复位AD9850 参    数:无 返回值  :无 *********************************************/ void AD9850_Reset_Parallel(void) {     AD9850_WCLK_CLR ;     AD9850_FQUD_CLR ;     //RST信号     AD9850_RST_CLR ;     AD9850_RST_SET ;     AD9850_Delay(0xFFFF) ;     AD9850_RST_CLR ; } /******************************************** 函数名称:AD9850_Write_Parallel 功    能:在并行模式下写AD9850寄存器 参    数:W0 - W0寄存器的值           freq - 频率值 返回值  :无 *********************************************/ void AD9850_Write_Parallel(unsigned char W0,unsigned long freq) {     unsigned char wdata ;     unsigned long  y=(unsigned long)(4294967295/AD9850_SYSTEM_COLCK) ;     y *= freq ;     wdata=W0 ;  //写w0     GPIO_Write(AD9850_DATA_PORT ,wdata) ;     AD9850_WCLK_SET ;     AD9850_WCLK_CLR ;         wdata=y>>24 ;  //写w1     GPIO_Write(AD9850_DATA_PORT ,wdata) ;     AD9850_WCLK_SET ;     AD9850_WCLK_CLR ;         wdata=y>>16 ;  //写w2     GPIO_Write(AD9850_DATA_PORT ,wdata) ;     AD9850_WCLK_SET ;     AD9850_WCLK_CLR ;         wdata=y>>8 ;  //写w3     GPIO_Write(AD9850_DATA_PORT ,wdata) ;     AD9850_WCLK_SET ;     AD9850_WCLK_CLR ;         wdata=y>>0 ;  //写w4     GPIO_Write(AD9850_DATA_PORT ,wdata) ;     AD9850_WCLK_SET ;     AD9850_WCLK_CLR ;         AD9850_FQUD_SET ;  //移入使能     AD9850_Delay(0xFFFF) ;     AD9850_FQUD_CLR ; } #endif /* MODE_PARALLEL */ /*------------------------并行模式-------------------------*/ /*---------------------------------------------------------*/ /*------------------------串行模式-------------------------*/ #ifdef MODE_SEIAL /******************************************** 函数名称:AD9850_Reset_Sreial 功    能:在串行模式下复位AD9850 参    数:无 返回值  :无 *********************************************/ void AD9850_Reset_Sreial(void) {     AD9850_WCLK_CLR ;     AD9850_FQUD_CLR ;     //RST信号     AD9850_RST_CLR ;     AD9850_RST_SET ;     AD9850_Delay(0xFFFF) ;     AD9850_RST_CLR ;     //WCLK信号     AD9850_WCLK_CLR ;     AD9850_WCLK_SET ;     AD9850_Delay(0xFFFF) ;     AD9850_WCLK_CLR ;     //FQUD信号     AD9850_FQUD_CLR ;     AD9850_FQUD_SET ;     AD9850_Delay(0xFFFF) ;     AD9850_FQUD_CLR ; } /******************************************** 函数名称:AD9850_Write_Serial 功    能:在串行模式下写AD9850寄存器 参    数:W0 - W0寄存器的值           freq - 频率值 返回值  :无 *********************************************/ void AD9850_Write_Serial(unsigned char W0,unsigned long freq) {     unsigned char i,wdata ;     unsigned long  y ;     y = (unsigned long )268435456.0/AD9850_SYSTEM_COLCK*freq ;          wdata = y>>0 ;   //写w4     for(i=0 ;i<8 ;i++)     {         if(wdata & 0x01)           AD9850_DATA_Write_1 ;         else           AD9850_DATA_Write_0 ;         AD9850_WCLK_SET ;         wdata >>= 1 ;         AD9850_WCLK_CLR ;     }     wdata = y>>8 ;  //写w3      for(i=0 ;i<8 ;i++)     {         if(wdata & 0x01)           AD9850_DATA_Write_1 ;         else           AD9850_DATA_Write_0 ;         AD9850_WCLK_SET ;         wdata >>= 1 ;         AD9850_WCLK_CLR ;     }     wdata = y>>16 ;  //写w2      for(i=0 ;i<8 ;i++)     {         if(wdata & 0x01)           AD9850_DATA_Write_1 ;         else           AD9850_DATA_Write_0 ;         AD9850_WCLK_SET ;         wdata >>= 1 ;         AD9850_WCLK_CLR ;     }     wdata = y>>24 ;  //写w1      for(i=0 ;i<8 ;i++)     {         if(wdata & 0x01)           AD9850_DATA_Write_1 ;         else           AD9850_DATA_Write_0 ;         AD9850_WCLK_SET ;         wdata >>= 1 ;         AD9850_WCLK_CLR ;     }     wdata = W0 ;  //写w0      for(i=0 ;i<8 ;i++)     {         if(wdata & 0x01)           AD9850_DATA_Write_1 ;         else           AD9850_DATA_Write_0 ;         AD9850_WCLK_SET ;         wdata >>= 1 ;         AD9850_WCLK_CLR ;     }         AD9850_FQUD_SET ;  //移入使能     AD9850_Delay(0xFFFF) ;     AD9850_FQUD_CLR ; } #endif /* MODE_SERIAL */ /*------------------------串行模式-------------------------*/ /*---------------------------------------------------------*/ /******************************************** 函数名称:Init_AD9834 功    能:初始化AD9834 参    数:无 返回值  :无 *********************************************/ void Init_AD9850(void) { #ifdef MODE_SEIAL   //串行模式     GPIO_InitTypeDef GPIO_InitStructure ;     GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST | AD9850_DATA ;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ;         AD9850_Reset_Sreial() ; #endif     #ifdef MODE_PARALLEL //并行模式     GPIO_InitTypeDef GPIO_InitStructure ;     GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST ;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ;         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     GPIO_Init(AD9850_DATA_PORT ,&GPIO_InitStructure) ;         AD9850_Reset_Parallel() ; #endif     } //================================================================// 写得一般,希望大家能给出点建议!
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服